From 1d840a3813a15361be709375be31667f1a128943 Mon Sep 17 00:00:00 2001 From: Richard Hestilow Date: Fri, 10 Aug 2001 03:36:17 +0000 Subject: [PATCH] Install all pixmaps. (pixmaps_DATA): Add blank-screen.png. 2001-08-09 Richard Hestilow * Makeflie.am (EXTRA_DIST): Install all pixmaps. (pixmaps_DATA): Add blank-screen.png. * pref-file.c: Replace "programs" value with a regenerated string. (print_aligned_row): Added. (print_list_to_str): Added. * preferences.h (Screensaver): Add new fields "filename", "compat_command_line", "fakepreview", and "fakes", to deal with the new xml storage. (Preferences): Add new fields "savers_hash" and "invalidsavers". * preferences.c (screensaver_list_prepend_dir): Added. (screensaver_cmp_func): Added. (screensaver_list_load): Added. (preferences_new): Initialize savers_hash. (clean_saver_list): Added. (preferences_load): Load screensavers from xml. (parse_arg_default): Added. (screensaver_read_xml): Updated for the new format. (screensaver_new_from_file): Added. * prefs-widget.c (double_click_cb): Added. (): Remove right click menu, add double click handler. (model_is_cell_editable): Fix for etable bug. (random_timeout_cb): Avoid vidwhacker and webcollage. * preview.c: Optionally show fakepreview if set, and deal with compat_command_line, and refresh pixbufs. (command_exists): Renamed to rc_command_exists. * rc-parse.c: (parse_screensaver_list): Merely update the existing entries, via the provided hash. * screensaver-prefs-dialog.c (get_argument_data): Just find the xml file using ::filename. * screensavers/magic.pl.in: Added. * screensavers/Makefile.am: Generate .xml.h files for translators, and install all .xml files and .png files, and run magic.pl on make install. --- ChangeLog | 5 + capplets/screensaver/ChangeLog | 44 ++ capplets/screensaver/Makefile.am | 4 +- capplets/screensaver/pref-file.c | 119 ++++ capplets/screensaver/preferences.c | 217 +++++++- capplets/screensaver/preferences.h | 9 + capplets/screensaver/prefs-widget.c | 83 ++- capplets/screensaver/preview.c | 70 ++- capplets/screensaver/rc-parse.c | 37 +- capplets/screensaver/rc-parse.h | 4 +- .../screensaver/screensaver-prefs-dialog.c | 62 +-- .../screensaver/screensavers/3d_clock.xml | 2 +- capplets/screensaver/screensavers/Makefile.am | 263 +++++---- capplets/screensaver/screensavers/TODO | 3 + capplets/screensaver/screensavers/ant.xml | 5 +- .../screensaver/screensavers/atlantis.xml | 5 +- .../screensaver/screensavers/attraction.xml | 12 +- capplets/screensaver/screensavers/blaster.xml | 8 + .../screensaver/screensavers/blitspin.xml | 7 +- .../screensaver/screensavers/bouboule.xml | 5 +- capplets/screensaver/screensavers/braid.xml | 5 +- capplets/screensaver/screensavers/bsod.xml | 5 +- .../screensaver/screensavers/bubble3d.xml | 5 +- capplets/screensaver/screensavers/bubbles.xml | 5 +- capplets/screensaver/screensavers/bumps.xml | 8 + capplets/screensaver/screensavers/cage.xml | 5 +- capplets/screensaver/screensavers/ccurve.xml | 8 + capplets/screensaver/screensavers/compass.xml | 5 +- capplets/screensaver/screensavers/coral.xml | 5 +- capplets/screensaver/screensavers/cosmos.xml | 10 + .../screensaver/screensavers/critical.xml | 5 +- capplets/screensaver/screensavers/crystal.xml | 5 +- .../screensaver/screensavers/cynosure.xml | 5 +- .../screensaver/screensavers/dangerball.xml | 8 + .../screensaver/screensavers/decayscreen.png | Bin 0 -> 23608 bytes .../screensaver/screensavers/decayscreen.xml | 4 +- capplets/screensaver/screensavers/deco.xml | 5 +- capplets/screensaver/screensavers/deluxe.xml | 5 +- capplets/screensaver/screensavers/demon.xml | 5 +- .../screensaver/screensavers/discrete.xml | 5 +- capplets/screensaver/screensavers/distort.png | Bin 0 -> 58680 bytes capplets/screensaver/screensavers/distort.xml | 5 +- capplets/screensaver/screensavers/drift.xml | 5 +- .../screensavers/electricsheep.xml | 10 + .../screensaver/screensavers/epicycle.xml | 5 +- .../screensaver/screensavers/extrusion.xml | 6 + .../screensaver/screensavers/fadeplot.xml | 5 +- capplets/screensaver/screensavers/flag.xml | 5 +- capplets/screensaver/screensavers/flame.xml | 5 +- capplets/screensaver/screensavers/flow.xml | 5 +- capplets/screensaver/screensavers/forest.xml | 10 +- capplets/screensaver/screensavers/galaxy.xml | 5 +- capplets/screensaver/screensavers/gears.xml | 6 +- capplets/screensaver/screensavers/gflux.xml | 8 + .../screensaver/screensavers/glplanet.xml | 5 +- capplets/screensaver/screensavers/gltext.xml | 9 + capplets/screensaver/screensavers/goban.xml | 6 + capplets/screensaver/screensavers/goop.xml | 5 +- capplets/screensaver/screensavers/grav.xml | 6 +- .../screensaver/screensavers/greynetic.xml | 5 +- capplets/screensaver/screensavers/halo.xml | 7 +- capplets/screensaver/screensavers/helix.xml | 5 +- .../screensaver/screensavers/hopalong.xml | 5 +- .../screensaver/screensavers/hyperball.xml | 8 + .../screensaver/screensavers/hypercube.xml | 5 +- capplets/screensaver/screensavers/ifs.xml | 5 +- capplets/screensaver/screensavers/imsmap.xml | 7 +- .../screensaver/screensavers/interference.xml | 5 +- capplets/screensaver/screensavers/jigsaw.png | Bin 0 -> 15194 bytes capplets/screensaver/screensavers/jigsaw.xml | 5 +- capplets/screensaver/screensavers/julia.xml | 5 +- .../screensaver/screensavers/kaleidescope.xml | 5 +- capplets/screensaver/screensavers/kumppa.xml | 5 +- capplets/screensaver/screensavers/lament.xml | 5 +- capplets/screensaver/screensavers/laser.xml | 5 +- .../screensaver/screensavers/lightning.xml | 5 +- capplets/screensaver/screensavers/lisa.xml | 5 +- capplets/screensaver/screensavers/lissie.xml | 5 +- capplets/screensaver/screensavers/lmorph.xml | 5 +- capplets/screensaver/screensavers/loop.xml | 5 +- capplets/screensaver/screensavers/magic.pl.in | 510 ++++++++++++++++++ capplets/screensaver/screensavers/maze.xml | 5 +- capplets/screensaver/screensavers/moebius.xml | 5 +- capplets/screensaver/screensavers/moire.xml | 5 +- capplets/screensaver/screensavers/moire2.xml | 5 +- .../screensaver/screensavers/molecule.xml | 9 + capplets/screensaver/screensavers/morph3d.xml | 5 +- .../screensaver/screensavers/mountain.xml | 5 +- capplets/screensaver/screensavers/munch.xml | 12 +- .../screensaver/screensavers/nerverot.xml | 9 + capplets/screensaver/screensavers/noseguy.xml | 5 +- capplets/screensaver/screensavers/pedal.xml | 5 +- .../screensaver/screensavers/penetrate.xml | 5 +- capplets/screensaver/screensavers/penrose.xml | 9 +- capplets/screensaver/screensavers/petri.xml | 9 + .../screensaver/screensavers/phosphor.xml | 8 + capplets/screensaver/screensavers/pipes.xml | 5 +- capplets/screensaver/screensavers/pulsar.xml | 9 + capplets/screensaver/screensavers/pyro.xml | 5 +- capplets/screensaver/screensavers/qix.xml | 8 +- capplets/screensaver/screensavers/rd-bomb.xml | 6 +- capplets/screensaver/screensavers/ripples.xml | 10 + capplets/screensaver/screensavers/rocks.xml | 5 +- .../screensaver/screensavers/rorschach.xml | 5 +- capplets/screensaver/screensavers/rotor.xml | 5 +- .../screensaver/screensavers/rotzoomer.xml | 10 + capplets/screensaver/screensavers/rubik.xml | 8 + .../screensaver/screensavers/shadebobs.xml | 8 + .../screensaver/screensavers/sierpinski.xml | 5 +- .../screensaver/screensavers/sierpinski3d.xml | 8 + .../screensaver/screensavers/slidescreen.xml | 5 +- capplets/screensaver/screensavers/slip.png | Bin 0 -> 39859 bytes capplets/screensaver/screensavers/slip.xml | 5 +- capplets/screensaver/screensavers/sonar.xml | 7 +- .../screensaver/screensavers/speedmine.xml | 16 + capplets/screensaver/screensavers/sphere.xml | 5 +- capplets/screensaver/screensavers/spiral.xml | 5 +- .../screensaver/screensavers/spotlight.xml | 5 +- .../screensaver/screensavers/sproingies.xml | 5 +- capplets/screensaver/screensavers/squiral.xml | 5 +- capplets/screensaver/screensavers/ssystem.xml | 6 + capplets/screensaver/screensavers/stairs.xml | 5 +- .../screensaver/screensavers/starfish.xml | 6 +- .../screensaver/screensavers/starwars.xml | 8 + .../screensaver/screensavers/stonerview.xml | 8 + capplets/screensaver/screensavers/strange.xml | 5 +- .../screensavers/superquadrics.xml | 5 +- capplets/screensaver/screensavers/swirl.xml | 5 +- capplets/screensaver/screensavers/t3d.xml | 8 + .../screensaver/screensavers/triangle.xml | 5 +- capplets/screensaver/screensavers/truchet.xml | 5 +- .../screensaver/screensavers/vidwhacker.png | Bin 0 -> 103023 bytes .../screensaver/screensavers/vidwhacker.xml | 11 + capplets/screensaver/screensavers/vines.xml | 5 +- capplets/screensaver/screensavers/wander.xml | 9 + .../screensaver/screensavers/webcollage.png | Bin 0 -> 138943 bytes .../screensaver/screensavers/webcollage.xml | 12 + .../screensavers/whirlwindwarp.xml | 8 + .../screensaver/screensavers/whirlygig.xml | 8 + capplets/screensaver/screensavers/worm.xml | 5 +- capplets/screensaver/screensavers/xaos.xml | 6 + .../screensaver/screensavers/xdaliclock.xml | 6 + capplets/screensaver/screensavers/xearth.xml | 6 + .../screensaver/screensavers/xfishtank.xml | 6 + capplets/screensaver/screensavers/xflame.xml | 5 +- capplets/screensaver/screensavers/xjack.xml | 5 +- capplets/screensaver/screensavers/xlyap.xml | 5 +- capplets/screensaver/screensavers/xmatrix.xml | 5 +- .../screensaver/screensavers/xmountains.xml | 9 + .../screensaver/screensavers/xrayswarm.xml | 8 + capplets/screensaver/screensavers/xroger.xml | 3 +- capplets/screensaver/screensavers/xsnow.xml | 6 + .../screensaver/screensavers/xspirograph.xml | 8 + capplets/screensaver/screensavers/xteevee.xml | 8 + capplets/screensaver/screensavers/zoom.xml | 9 + configure.in | 20 + po/ChangeLog | 6 + po/POTFILES.in | 136 +++++ 158 files changed, 2083 insertions(+), 354 deletions(-) create mode 100644 capplets/screensaver/screensavers/TODO create mode 100644 capplets/screensaver/screensavers/blaster.xml create mode 100644 capplets/screensaver/screensavers/bumps.xml create mode 100644 capplets/screensaver/screensavers/ccurve.xml create mode 100644 capplets/screensaver/screensavers/cosmos.xml create mode 100644 capplets/screensaver/screensavers/dangerball.xml create mode 100644 capplets/screensaver/screensavers/decayscreen.png create mode 100644 capplets/screensaver/screensavers/distort.png create mode 100644 capplets/screensaver/screensavers/electricsheep.xml create mode 100644 capplets/screensaver/screensavers/extrusion.xml create mode 100644 capplets/screensaver/screensavers/gflux.xml create mode 100644 capplets/screensaver/screensavers/gltext.xml create mode 100644 capplets/screensaver/screensavers/goban.xml create mode 100644 capplets/screensaver/screensavers/hyperball.xml create mode 100644 capplets/screensaver/screensavers/jigsaw.png create mode 100755 capplets/screensaver/screensavers/magic.pl.in create mode 100644 capplets/screensaver/screensavers/molecule.xml create mode 100644 capplets/screensaver/screensavers/nerverot.xml create mode 100644 capplets/screensaver/screensavers/petri.xml create mode 100644 capplets/screensaver/screensavers/phosphor.xml create mode 100644 capplets/screensaver/screensavers/pulsar.xml create mode 100644 capplets/screensaver/screensavers/ripples.xml create mode 100644 capplets/screensaver/screensavers/rotzoomer.xml create mode 100644 capplets/screensaver/screensavers/rubik.xml create mode 100644 capplets/screensaver/screensavers/shadebobs.xml create mode 100644 capplets/screensaver/screensavers/sierpinski3d.xml create mode 100644 capplets/screensaver/screensavers/slip.png create mode 100644 capplets/screensaver/screensavers/speedmine.xml create mode 100644 capplets/screensaver/screensavers/ssystem.xml create mode 100644 capplets/screensaver/screensavers/starwars.xml create mode 100644 capplets/screensaver/screensavers/stonerview.xml create mode 100644 capplets/screensaver/screensavers/t3d.xml create mode 100644 capplets/screensaver/screensavers/vidwhacker.png create mode 100644 capplets/screensaver/screensavers/vidwhacker.xml create mode 100644 capplets/screensaver/screensavers/wander.xml create mode 100644 capplets/screensaver/screensavers/webcollage.png create mode 100644 capplets/screensaver/screensavers/webcollage.xml create mode 100644 capplets/screensaver/screensavers/whirlwindwarp.xml create mode 100644 capplets/screensaver/screensavers/whirlygig.xml create mode 100644 capplets/screensaver/screensavers/xaos.xml create mode 100644 capplets/screensaver/screensavers/xdaliclock.xml create mode 100644 capplets/screensaver/screensavers/xearth.xml create mode 100644 capplets/screensaver/screensavers/xfishtank.xml create mode 100644 capplets/screensaver/screensavers/xmountains.xml create mode 100644 capplets/screensaver/screensavers/xrayswarm.xml create mode 100644 capplets/screensaver/screensavers/xsnow.xml create mode 100644 capplets/screensaver/screensavers/xspirograph.xml create mode 100644 capplets/screensaver/screensavers/xteevee.xml create mode 100644 capplets/screensaver/screensavers/zoom.xml diff --git a/ChangeLog b/ChangeLog index aa2fe564f..df719031b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-08-09 Richard Hestilow + + * configure.in: Check for xscreensaver and perl, and + generate capplets/screensaver/magic.pl. + 2001-08-07 Bradford Hovinen * configure.in: Corect behavior when prefix is not explicitly diff --git a/capplets/screensaver/ChangeLog b/capplets/screensaver/ChangeLog index ef0d2dfd4..c54233c8e 100644 --- a/capplets/screensaver/ChangeLog +++ b/capplets/screensaver/ChangeLog @@ -1,3 +1,47 @@ +2001-08-09 Richard Hestilow + + * Makeflie.am (EXTRA_DIST): Install all pixmaps. + (pixmaps_DATA): Add blank-screen.png. + + * pref-file.c: Replace "programs" value with a regenerated + string. + (print_aligned_row): Added. + (print_list_to_str): Added. + + * preferences.h (Screensaver): Add new fields "filename", + "compat_command_line", "fakepreview", and "fakes", + to deal with the new xml storage. + (Preferences): Add new fields "savers_hash" and "invalidsavers". + + * preferences.c (screensaver_list_prepend_dir): Added. + (screensaver_cmp_func): Added. + (screensaver_list_load): Added. + (preferences_new): Initialize savers_hash. + (clean_saver_list): Added. + (preferences_load): Load screensavers from xml. + (parse_arg_default): Added. + (screensaver_read_xml): Updated for the new format. + (screensaver_new_from_file): Added. + + * prefs-widget.c (double_click_cb): Added. + (): Remove right click menu, add double click handler. + (model_is_cell_editable): Fix for etable bug. + (random_timeout_cb): Avoid vidwhacker and webcollage. + * preview.c: Optionally show fakepreview if set, and + deal with compat_command_line, and refresh pixbufs. + (command_exists): Renamed to rc_command_exists. + + * rc-parse.c: (parse_screensaver_list): Merely update + the existing entries, via the provided hash. + + * screensaver-prefs-dialog.c (get_argument_data): Just + find the xml file using ::filename. + + * screensavers/magic.pl.in: Added. + * screensavers/Makefile.am: Generate .xml.h files for translators, + and install all .xml files and .png files, and run magic.pl on + make install. + 2001-07-31 Chema Celorio * Makefile.am (cappletname): add DISTDIR to install-data-local diff --git a/capplets/screensaver/Makefile.am b/capplets/screensaver/Makefile.am index fbac825bc..cfee9194f 100644 --- a/capplets/screensaver/Makefile.am +++ b/capplets/screensaver/Makefile.am @@ -19,7 +19,7 @@ screensaver_properties_capplet_SOURCES = \ resources.c resources.h\ XScreenSaver_ad.h -pixmaps_DATA = no-hack.png blank-screen.png +pixmaps_DATA = no-hack.png blank-screen.png screen.png ## ## You should not need to modify anything below this line @@ -39,7 +39,7 @@ install-data-am: install-data-local INCLUDES = $(GNOMECC_CAPPLETS_CFLAGS) CLEANFILES = $(GNOMECC_CAPPLETS_CLEANFILES) -EXTRA_DIST = $(GNOMECC_CAPPLETS_EXTRA_DIST) no-hack.png +EXTRA_DIST = $(GNOMECC_CAPPLETS_EXTRA_DIST) $(pixmaps_DATA) iconsdir = $(GNOMECC_ICONS_DIR) Gladedir = $(GNOMECC_GLADE_DIR) pixmapsdir = $(GNOMECC_PIXMAPS_DIR) diff --git a/capplets/screensaver/pref-file.c b/capplets/screensaver/pref-file.c index a5a7178ea..6b11b94c8 100644 --- a/capplets/screensaver/pref-file.c +++ b/capplets/screensaver/pref-file.c @@ -417,6 +417,115 @@ write_preference_cb (gchar *key, gchar *value, FILE *out) return FALSE; } +static gchar* +print_aligned_row (const gchar *lbl, const gchar *cmd, gboolean enabled) +{ + int len; + int ntab, nspc; + gchar *tab, *spc; + gchar *buf; + + len = strlen (lbl) + 2; /* Quotes */ + ntab = (30 - len) / 8; + nspc = (30 - len) % 8; + tab = g_strnfill (ntab, '\t'); + spc = g_strnfill (nspc, ' '); + buf = g_strdup_printf ("%s%s%s\"%s\" %s\n", + (enabled) ? "" : "-", + tab, spc, + lbl, cmd); + g_free (tab); + g_free (spc); + + return buf; +} + +static gchar* +print_list_to_str (Preferences *prefs) +{ + gchar *lbl, *cmd, *buf; + gchar *ret; + Screensaver *saver; + GList *l, *fake; + GString *s; + gboolean enabled; + + s = g_string_new (""); + + for (l = prefs->screensavers; l != NULL; l = l->next) + { + saver = l->data; + + if (saver->command_line) + cmd = saver->command_line; + else if (saver->compat_command_line) + cmd = saver->compat_command_line; + else + continue; + + if (prefs->selection_mode == SM_CHOOSE_RANDOMLY) + { + /* I wouldn't want these running unless I'd + * explicitly enabled them */ + if (!strcmp (saver->name, "webcollage") + || !strcmp (saver->name, "vidwhacker")) + enabled = FALSE; + else + enabled = TRUE; + } + else + enabled = saver->enabled; + if (saver->label) + lbl = saver->label; + else + lbl = saver->name; + + buf = print_aligned_row (lbl, cmd, enabled); + g_string_append (s, buf); + g_free (buf); + + for (fake = saver->fakes; fake != NULL; fake = fake->next) + { + buf = print_aligned_row (fake->data, cmd, FALSE); + g_string_append (s, buf); + g_free (buf); + } + } + + for (l = prefs->invalidsavers; l != NULL; l = l->next) + { + saver = l->data; + + if (saver->command_line) + cmd = saver->command_line; + else if (saver->compat_command_line) + cmd = saver->compat_command_line; + else + cmd = "/bin/true"; + + if (saver->label) + lbl = saver->label; + else + lbl = saver->name; + + buf = print_aligned_row (lbl, cmd, FALSE); + g_string_append (s, buf); + g_free (buf); + + for (fake = saver->fakes; fake != NULL; fake = fake->next) + { + buf = print_aligned_row (fake->data, cmd, FALSE); + g_string_append (s, buf); + g_free (buf); + } + } + + ret = s->str; + g_string_free (s, FALSE); + + return ret; +} + /* Adapted from xscreensaver 3.24 driver/prefs.c line 537 ... */ gint @@ -427,6 +536,7 @@ preferences_save_to_file (Preferences *prefs) const char *tmp_name = init_file_tmp_name(); char *n2 = chase_symlinks (name); struct stat st; + gchar *progs, *oldprogs; FILE *out; @@ -485,6 +595,15 @@ preferences_save_to_file (Preferences *prefs) "XScreenSaver", "xscreensaver", "3.24", whoami, timestr); } + /* Ok this is lame, but it is easier than rewriting stuff */ + progs = print_list_to_str (prefs); + oldprogs = g_tree_lookup (prefs->config_db, "programs"); + /* Is this the right way of doing it? */ + g_tree_remove (prefs->config_db, "programs"); + if (oldprogs) + g_free (oldprogs); + g_tree_insert (prefs->config_db, "programs", progs); + g_tree_traverse (prefs->config_db, (GTraverseFunc) write_preference_cb, G_IN_ORDER, out); diff --git a/capplets/screensaver/preferences.c b/capplets/screensaver/preferences.c index d4570334a..fc069d0b6 100644 --- a/capplets/screensaver/preferences.c +++ b/capplets/screensaver/preferences.c @@ -30,8 +30,11 @@ #include #include #include +#include +#include #include +#include #include "preferences.h" #include "preview.h" @@ -98,7 +101,7 @@ read_prefs_from_db (Preferences *prefs) if (value) { tmp = g_strdup (value); - prefs->screensavers = parse_screensaver_list (tmp); + parse_screensaver_list (prefs->savers_hash, tmp); g_free (tmp); } } @@ -155,6 +158,71 @@ store_prefs_in_db (Preferences *prefs) write_screensaver_list (prefs->screensavers)); } +static GList* +screensaver_list_prepend_dir (GHashTable *savers_hash, + GList *l, const gchar *dirname) +{ + DIR *dir; + struct dirent *dent; + gchar *filename; + Screensaver *saver; + + g_return_val_if_fail (savers_hash != NULL, NULL); + g_return_val_if_fail (dirname != NULL, NULL); + + dir = opendir (dirname); + if (!dir) + return l; + + while ((dent = readdir (dir))) + { + if (dent->d_name[0] == '.') + continue; + + filename = g_concat_dir_and_file (dirname, dent->d_name); + saver = screensaver_new_from_file (filename); + if (saver) + { + l = g_list_prepend (l, saver); + g_hash_table_insert (savers_hash, + saver->name, saver); + saver->link = l; + } + g_free (filename); + } + + return l; +} + +static gint +screensaver_cmp_func (gconstpointer a, gconstpointer b) +{ + const Screensaver *s1 = a; + const Screensaver *s2 = b; + + return strcmp (s1->name, s2->name); +} + +static GList* +screensaver_list_load (GHashTable *savers_hash) +{ + GList *l = NULL; + + gchar *userdir; + + l = screensaver_list_prepend_dir (savers_hash, + l, GNOMECC_SCREENSAVERS_DIR); + + userdir = g_concat_dir_and_file (g_get_home_dir (), ".screensavers"); + l = screensaver_list_prepend_dir (savers_hash, + l, userdir); + g_free (userdir); + + /* FIXME: Does not work with utf8 */ + l = g_list_sort (l, screensaver_cmp_func); + return l; +} + Preferences * preferences_new (void) { @@ -162,6 +230,8 @@ preferences_new (void) prefs = g_new0 (Preferences, 1); + prefs->savers_hash = g_hash_table_new (g_str_hash, g_str_equal); + /* Load default values */ preferences_load_from_xrdb (prefs); @@ -187,6 +257,8 @@ preferences_clone (Preferences *prefs) Preferences *new_prefs; new_prefs = g_new0 (Preferences, 1); + + new_prefs->savers_hash = g_hash_table_new (g_str_hash, g_str_equal); new_prefs->config_db = g_tree_new ((GCompareFunc) strcmp); @@ -219,9 +291,37 @@ preferences_destroy (Preferences *prefs) } if (prefs->programs_list) g_free (prefs->programs_list); + g_hash_table_destroy (prefs->savers_hash); g_free (prefs); } +static void +clean_saver_list (Preferences *prefs) +{ + GList *l, *next; + Screensaver *saver; + + l = prefs->screensavers; + while (l) + { + saver = l->data; + + if ((saver->command_line + && !rc_command_exists (saver->command_line)) + || (saver->compat_command_line + && !rc_command_exists (saver->compat_command_line)) + || !(saver->command_line || saver->compat_command_line)) + { + prefs->invalidsavers = g_list_append (prefs->invalidsavers, l->data); + next = l->next; + prefs->screensavers = g_list_remove_link (prefs->screensavers, l); + l = next; + continue; + } + l = l->next; + } +} + void preferences_load (Preferences *prefs) { @@ -230,7 +330,11 @@ preferences_load (Preferences *prefs) if (!preferences_load_from_file (prefs)) preferences_load_from_xrdb (prefs); + g_assert (prefs->screensavers == NULL); + prefs->screensavers = screensaver_list_load (prefs->savers_hash); + read_prefs_from_db (prefs); + clean_saver_list (prefs); prefs->selection_mode = gnome_config_get_int ("/Screensaver/Default/selection_mode=3"); @@ -325,8 +429,10 @@ preferences_read_xml (xmlDocPtr xml_doc) prefs->lock_timeout = xml_read_int (node); else if (!strcmp (node->name, "cycle")) prefs->cycle = xml_read_int (node); +#if 0 else if (!strcmp (node->name, "programs")) prefs->screensavers = xml_get_programs_list (node); +#endif else if (!strcmp (node->name, "selection-mode")) prefs->selection_mode = xml_read_int (node); else if (!strcmp (node->name, "use-dpms")) @@ -449,12 +555,50 @@ screensaver_remove (Screensaver *saver, GList *screensavers) return g_list_remove_link (screensavers, saver->link); } +#if 0 +static void +parse_select_default (GString *s, xmlNodePtr node) +{ + for (node = node->childs; node != NULL; node = node->next) + { + if (strcmp (node->name, "option")) + continue; + if (xmlGetProp (node, "test")) + continue; + g_string_append (s, xmlGetProp (node, "" + } +} +#endif + +static void +parse_arg_default (GString *s, xmlNodePtr node) +{ + gchar *arg; + gchar *val; + gchar **arr; + + arg = g_strdup (xmlGetProp (node, "arg")); + val = g_strdup (xmlGetProp (node, "default")); + if (!val) + return; + arr = g_strsplit (arg, "%", -1); + if (!arr) + return; + + g_string_append_c (s, ' '); + g_string_append (s, arr[0]); + g_string_append (s, val); + if (arr[1] && arg[2]) + g_string_append (s, arr[2]); +} Screensaver * screensaver_read_xml (xmlNodePtr saver_node) { Screensaver *saver; xmlNodePtr node; + GString *args; + gboolean have_args = FALSE; if (strcmp (saver_node->name, "screensaver")) return NULL; @@ -462,20 +606,56 @@ screensaver_read_xml (xmlNodePtr saver_node) saver = screensaver_new (); saver->enabled = FALSE; + saver->name = g_strdup (xmlGetProp (saver_node, "name")); saver->label = g_strdup (xmlGetProp (saver_node, "_label")); + args = g_string_new (saver->name); + for (node = saver_node->childs; node; node = node->next) { - if (!strcmp (node->name, "name")) - saver->name = g_strdup (xmlNodeGetContent (node)); - else if (!strcmp (node->name, "command-line")) + if (!strcmp (node->name, "command-line")) saver->command_line = g_strdup (xmlNodeGetContent (node)); else if (!strcmp (node->name, "visual")) saver->visual = g_strdup (xmlNodeGetContent (node)); else if (!strcmp (node->name, "enabled")) saver->enabled = xml_read_bool (node); + else if (!strcmp (node->name, "_description")) + saver->description = g_strdup (xmlNodeGetContent (node)); + else if (!strcmp (node->name, "fullcommand")) + saver->compat_command_line = g_strconcat (saver->name, " ", xmlGetProp (node, "arg"), NULL); + else if (!strcmp (node->name, "number")) + { + parse_arg_default (args, node); + have_args = TRUE; + } + else if (!strcmp (node->name, "command")) + { + g_string_append_c (args, ' '); + g_string_append (args, xmlGetProp (node, "arg")); + have_args = TRUE; + } + else if (!strcmp (node->name, "fakepreview")) + { + saver->fakepreview = g_concat_dir_and_file (GNOMECC_PIXMAPS_DIR "/screensavers", xmlNodeGetContent (node)); + } + else if (!strcmp (node->name, "fake")) + { + saver->fakes = g_list_append (saver->fakes, g_strdup (xmlGetProp (node, "name"))); + } } + if (have_args) + { + if (saver->compat_command_line) + { + g_warning ("Huh? Argument metadata and a fullcommand?"); + } + else + saver->command_line = g_strdup (args->str); + } + + g_string_free (args, TRUE); + return saver; } @@ -495,6 +675,35 @@ screensaver_write_xml (Screensaver *saver) return saver_node; } +Screensaver * +screensaver_new_from_file (const gchar *filename) +{ + Screensaver *saver; + xmlDocPtr doc; + xmlNodePtr node; + + g_return_val_if_fail (filename != NULL, NULL); + + doc = xmlParseFile (filename); + if (!doc) + return NULL; + + node = doc->root; + if (!node) + { + xmlFreeDoc (doc); + return NULL; + } + + saver = screensaver_read_xml (node); + if (saver) + saver->filename = g_strdup (filename); + xmlFreeDoc (doc); + + return saver; +} + + char * screensaver_get_desc (Screensaver *saver) { diff --git a/capplets/screensaver/preferences.h b/capplets/screensaver/preferences.h index e451af712..0e320341e 100644 --- a/capplets/screensaver/preferences.h +++ b/capplets/screensaver/preferences.h @@ -46,12 +46,17 @@ struct _Screensaver { guint id; gchar *name; + gchar *filename; gchar *label; gchar *description; gchar *command_line; + gchar *compat_command_line; gchar *visual; gboolean enabled; GList *link; + + gchar *fakepreview; + GList *fakes; }; struct _Preferences @@ -79,11 +84,14 @@ struct _Preferences SelectionMode selection_mode; GList *screensavers; + GHashTable *savers_hash; gint frozen; /* TRUE if we shouldn't reflect * preference changes in capplet */ GTree *config_db; /* key-value database of config options */ + GList *invalidsavers; + /* Settings that are not stored in .xscreensaver ... */ gboolean power_management; @@ -105,6 +113,7 @@ Preferences *preferences_read_xml (xmlDocPtr xml_doc); xmlDocPtr preferences_write_xml (Preferences *prefs); Screensaver *screensaver_new (void); +Screensaver *screensaver_new_from_file (const gchar *filename); void screensaver_destroy (Screensaver *saver); GList *screensaver_add (Screensaver *saver, GList *screensavers); diff --git a/capplets/screensaver/prefs-widget.c b/capplets/screensaver/prefs-widget.c index de0f6d556..83ff8c019 100644 --- a/capplets/screensaver/prefs-widget.c +++ b/capplets/screensaver/prefs-widget.c @@ -90,6 +90,9 @@ static void set_random_timeout (PrefsWidget *prefs_widget, static void popup_item_menu (ETable *table, int row, int col, GdkEvent *event, PrefsWidget *prefs_widget); +static void double_click_cb (ETable *table, + int row, int col, GdkEvent *event, + PrefsWidget *prefs_widget); static void about_cb (GtkWidget *widget, PrefsWidget *prefs_widget); @@ -237,10 +240,16 @@ prefs_widget_init (PrefsWidget *prefs_widget) gtk_signal_connect (GTK_OBJECT (table), "selection_change", GTK_SIGNAL_FUNC (selection_changed_cb), prefs_widget); + /* Disabled for now -- no need for Add/Remove/About */ +#if 0 gtk_signal_connect (GTK_OBJECT (table), "right_click", GTK_SIGNAL_FUNC (popup_item_menu), prefs_widget); - +#endif + gtk_signal_connect (GTK_OBJECT (table), "double_click", + GTK_SIGNAL_FUNC (double_click_cb), + prefs_widget); + widget = WID ("mode_option"); option_menu_connect (GTK_OPTION_MENU (widget), GTK_SIGNAL_FUNC (mode_changed_cb), @@ -604,7 +613,12 @@ model_set_value_at (ETableModel *etm, static gboolean model_is_cell_editable (ETableModel *etm, int col, int row, void *data) { - return (col == 0); + PrefsWidget *prefs_widget = PREFS_WIDGET (data); + + if (prefs_widget->selection_mode == SM_CHOOSE_FROM_LIST) + return (col == 0); + else + return FALSE; } static void * @@ -694,7 +708,7 @@ static void selection_foreach_func (int model_row, int *closure) { g_return_if_fail (closure != NULL); - + /* Selection mode is "single */ *closure = model_row; } @@ -703,6 +717,7 @@ static gint random_timeout_cb (PrefsWidget *prefs_widget) { GList *l, *old; + gboolean skippedwc = FALSE, skippedvw = FALSE; g_return_val_if_fail (prefs_widget != NULL, FALSE); @@ -716,6 +731,35 @@ random_timeout_cb (PrefsWidget *prefs_widget) /* Handles both "l initially NULL" and "end of list" */ if (!l) l = prefs_widget->screensavers; + old = l; + /* Strip out vidwhacker and webcollage -- don't want to sneak + * those into a random mode if the user didn't select them. + * Especially as a preview. */ + while (l) + { + if (skippedwc && skippedvw && old == l) + { + show_blank_preview (); + return FALSE; + } + if (!strcmp (((Screensaver*)l->data)->name, "webcollage")) + { + skippedwc = TRUE; + l = l->next; + if (!l) + l = prefs_widget->screensavers; + continue; + } + if (!strcmp (((Screensaver*)l->data)->name, "vidwhacker")) + { + skippedvw = TRUE; + l = l->next; + if (!l) + l = prefs_widget->screensavers; + continue; + } + break; + } } else /* Skip the non-enabled ones */ @@ -812,6 +856,14 @@ popup_item_menu (ETable *table, event->button.button, event->button.time); } +static void +double_click_cb (ETable *table, + int row, int col, GdkEvent *event, + PrefsWidget *prefs_widget) +{ + settings_cb (NULL, prefs_widget); +} + static void about_cb (GtkWidget *widget, PrefsWidget *prefs_widget) { @@ -823,7 +875,11 @@ about_cb (GtkWidget *widget, PrefsWidget *prefs_widget) label = gtk_label_new (desc); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); +#if 0 name = screensaver_get_label (prefs_widget->selected_saver->name); +#endif + name = g_strdup (prefs_widget->selected_saver->label); + title = g_strdup_printf ("About %s\n", name); g_free (name); @@ -843,6 +899,19 @@ about_cb (GtkWidget *widget, PrefsWidget *prefs_widget) gtk_widget_show_all (dlg); } +static void +prefs_ok_cb (ScreensaverPrefsDialog *dlg, PrefsWidget *widget) +{ + if (dlg->saver == widget->selected_saver) + show_preview (widget->selected_saver); +} + +static void +prefs_demo_cb (ScreensaverPrefsDialog *dlg, PrefsWidget *widget) +{ + show_preview (widget->selected_saver); +} + static void settings_cb (GtkWidget *button, PrefsWidget *widget) { @@ -851,14 +920,12 @@ settings_cb (GtkWidget *button, PrefsWidget *widget) if (!widget->selected_saver) return; dialog = screensaver_prefs_dialog_new (widget->selected_saver); -#if 0 - gtk_signal_connect (GTK_OBJECT (dialog), "ok-clicked", - GTK_SIGNAL_FUNC (screensaver_prefs_ok_cb), + gtk_signal_connect_after (GTK_OBJECT (dialog), "ok-clicked", + GTK_SIGNAL_FUNC (prefs_ok_cb), widget); - gtk_signal_connect (GTK_OBJECT (dialog), "demo", + gtk_signal_connect_after (GTK_OBJECT (dialog), "demo", GTK_SIGNAL_FUNC (prefs_demo_cb), widget); -#endif gtk_widget_show_all (dialog); } diff --git a/capplets/screensaver/preview.c b/capplets/screensaver/preview.c index bf908dbf2..1e8ad0681 100644 --- a/capplets/screensaver/preview.c +++ b/capplets/screensaver/preview.c @@ -45,6 +45,8 @@ static GtkWidget *preview_window; static pid_t preview_pid; static int timeout_id; +static int expose_id = 0; +static GdkPixbuf *pixbuf = NULL; #if 0 @@ -63,10 +65,29 @@ print_args (char **args) #endif +static void +expose_func (GtkWidget *widget, GdkEventExpose *event, gpointer data) +{ + if (!pixbuf) + return; + + gdk_pixbuf_render_to_drawable + (pixbuf, (GdkDrawable *) preview_window->window, + preview_window->style->fg_gc[0], + event->area.x, event->area.y, + event->area.x, event->area.y, + event->area.width, event->area.height, + GDK_RGB_DITHER_NORMAL, 0, 0); +} + void set_preview_window (GtkWidget *widget) { + if (expose_id) + gtk_signal_disconnect (GTK_OBJECT (preview_window), expose_id); preview_window = widget; + expose_id = gtk_signal_connect (GTK_OBJECT (preview_window), + "expose_event", expose_func, NULL); } static char ** @@ -193,6 +214,14 @@ static void show_screensaver (GdkWindow *window, Screensaver *saver, pid_t *pid) { char **args; + gchar *command_line; + + if (saver->command_line) + command_line = saver->command_line; + else + { + command_line = saver->compat_command_line; + } *pid = fork (); @@ -203,7 +232,7 @@ show_screensaver (GdkWindow *window, Screensaver *saver, pid_t *pid) else if (*pid == 0) { nice (20); /* Very low priority */ - args = g_strsplit (saver->command_line, " ", -1); + args = g_strsplit (command_line, " ", -1); args = fix_arguments (args); args = strip_arg (args, "-root"); args = add_window_arg (args, window); @@ -222,7 +251,6 @@ show_screensaver (GdkWindow *window, Screensaver *saver, pid_t *pid) static gint show_screensaver_timeout (void) { - GdkPixbuf *pixbuf; int ret; ret = waitpid (preview_pid, NULL, WNOHANG); @@ -231,6 +259,9 @@ show_screensaver_timeout (void) g_error ("waitpid: %s", g_strerror (errno)); } else if (ret > 0) { + if (pixbuf) + gdk_pixbuf_unref (pixbuf); + pixbuf = gdk_pixbuf_new_from_file (GNOMECC_PIXMAPS_DIR "/no-hack.png"); gdk_pixbuf_render_to_drawable @@ -249,12 +280,32 @@ show_preview (Screensaver *saver) { /* Note: kill this next line for a very interesting effect ... */ close_preview (); - if (!saver->command_line) return; + if (!(saver->command_line || saver->compat_command_line || saver->fakepreview)) return; gtk_widget_map (preview_window); - show_screensaver (preview_window->window, saver, &preview_pid); - timeout_id = - gtk_timeout_add (500, (GtkFunction) - show_screensaver_timeout, NULL); + + if (pixbuf) + { + gdk_pixbuf_unref (pixbuf); + pixbuf = NULL; + } + + if (saver->fakepreview) + { + pixbuf = gdk_pixbuf_new_from_file (saver->fakepreview); + gdk_pixbuf_render_to_drawable + (pixbuf, (GdkDrawable *) preview_window->window, + preview_window->style->fg_gc[0], 0, 0, 0, 0, + gdk_pixbuf_get_width (pixbuf), + gdk_pixbuf_get_height (pixbuf), + GDK_RGB_DITHER_NONE, 0, 0); + } + else + { + show_screensaver (preview_window->window, saver, &preview_pid); + timeout_id = + gtk_timeout_add (500, (GtkFunction) + show_screensaver_timeout, NULL); + } } void @@ -275,11 +326,12 @@ close_preview (void) void show_blank_preview (void) { - GdkPixbuf *pixbuf; - close_preview (); gtk_widget_map (preview_window); + if (pixbuf) + gdk_pixbuf_unref (pixbuf); + pixbuf = gdk_pixbuf_new_from_file (GNOMECC_PIXMAPS_DIR "/blank-screen.png"); gdk_pixbuf_render_to_drawable (pixbuf, (GdkDrawable *) preview_window->window, diff --git a/capplets/screensaver/rc-parse.c b/capplets/screensaver/rc-parse.c index 1740527ce..a7c207b40 100644 --- a/capplets/screensaver/rc-parse.c +++ b/capplets/screensaver/rc-parse.c @@ -242,13 +242,13 @@ get_screensaver_dir_list (void) return screensaver_dir_list; } -/* command_exists +/* rc_command_exists * * Given a command line, determines if the command may be executed */ -static gboolean -command_exists (char *command) +gboolean +rc_command_exists (char *command) { GList *screensaver_dir_list; GList *node; @@ -342,7 +342,7 @@ parse_screensaver (const char *line) } h->command_line = strip_whitespace (line); - if (!command_exists (h->command_line)) { + if (!rc_command_exists (h->command_line)) { screensaver_destroy (h); return NULL; } @@ -355,8 +355,8 @@ parse_screensaver (const char *line) /* Adapted from xscreensaver 3.24 driver/prefs.c line 1076 ... */ -GList * -parse_screensaver_list (char *list) +void +parse_screensaver_list (GHashTable *savers_hash, char *list) { int start = 0; int end = 0; @@ -369,6 +369,9 @@ parse_screensaver_list (char *list) GList *list_head = NULL, *list_tail = NULL; Screensaver *saver; + g_return_if_fail (savers_hash != NULL); + g_return_if_fail (list != NULL); + size = strlen (list); /* Iterate over the lines in `d' (the string with newlines) @@ -392,19 +395,23 @@ parse_screensaver_list (char *list) saver = parse_screensaver (list + start); if (saver) { - saver->id = count++; - if (saver->enabled) number_enabled++; - total++; - list_tail = g_list_append (list_tail, saver); - if (!list_head) list_head = list_tail; - list_tail = g_list_last (list_tail); - saver->link = list_tail; + if (saver->enabled) + { + Screensaver *real_saver; + real_saver = g_hash_table_lookup (savers_hash, + saver->name); + if (real_saver) + { + real_saver->enabled = TRUE; + real_saver->command_line = + g_strdup (saver->command_line); + } + } + screensaver_destroy (saver); } start = end + 1; } - - return list_head; } gchar * diff --git a/capplets/screensaver/rc-parse.h b/capplets/screensaver/rc-parse.h index 7e68cd414..f5906dd05 100644 --- a/capplets/screensaver/rc-parse.h +++ b/capplets/screensaver/rc-parse.h @@ -32,7 +32,7 @@ double parse_float_resource (char *res); guint parse_time_resource (char *res, gboolean sec); guint parse_seconds_resource (char *res); gdouble parse_minutes_resource (char *res); -GList *parse_screensaver_list (char *list); +void parse_screensaver_list (GHashTable *savers_hash, char *list); gchar *write_boolean (gboolean value); gchar *write_integer (gint value); @@ -47,4 +47,6 @@ int string_columns (const char *string, int length, int start); GList *get_screensaver_dir_list (void); +gboolean rc_command_exists (char *command); + #endif /* __RC_PARSE_H */ diff --git a/capplets/screensaver/screensaver-prefs-dialog.c b/capplets/screensaver/screensaver-prefs-dialog.c index 348118074..4631b2c37 100644 --- a/capplets/screensaver/screensaver-prefs-dialog.c +++ b/capplets/screensaver/screensaver-prefs-dialog.c @@ -741,32 +741,38 @@ static xmlDocPtr get_argument_data (Screensaver *saver) { xmlDocPtr doc; - gchar *file_name; - gchar *lang; - + xmlNodePtr node; + gboolean options = FALSE; + g_return_val_if_fail (saver != NULL, NULL); - g_return_val_if_fail (saver->name != NULL, NULL); + g_return_val_if_fail (saver->filename != NULL, NULL); - lang = g_getenv ("LANG"); - if (lang) - lang = g_strconcat (lang, "/", NULL); - else - lang = g_strdup (""); + doc = xmlParseFile (saver->filename); + if (!doc) + return NULL; - file_name = g_strconcat (GNOMECC_SCREENSAVERS_DIR "/screensavers/", - lang, saver->name, ".xml", NULL); - doc = xmlParseFile (file_name); - g_free (file_name); - - /* Fall back on default language if given language is not found */ - if (!doc && *lang != '\0') { - file_name = g_strconcat (GNOMECC_SCREENSAVERS_DIR "/screensavers/", - saver->name, ".xml", NULL); - doc = xmlParseFile (file_name); - g_free (file_name); + if (!(doc->root && doc->root->childs)) + { + xmlFreeDoc (doc); + return NULL; + } + + for (node = doc->root->childs; node != NULL; node = node->next) + { + if (!strcmp (node->name, "select") + || !strcmp (node->name, "number") + || !strcmp (node->name, "boolean")) + { + options = TRUE; + break; + } + } + + if (!options) + { + xmlFreeDoc (doc); + return NULL; } - - g_free (lang); return doc; } @@ -1352,7 +1358,7 @@ static GtkWidget * get_basic_screensaver_widget (ScreensaverPrefsDialog *dialog) { GtkWidget *vbox, *label; - GList *node; + /*GList *node;*/ vbox = gtk_vbox_new (FALSE, 10); gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); @@ -1675,20 +1681,15 @@ static gboolean arg_mapping_exists (Screensaver *saver) { struct stat buf; - char *filename; gboolean ret; - if (!saver->name) return FALSE; + if (!saver->filename) return FALSE; - filename = g_strconcat (GNOMECC_SCREENSAVERS_DIR "/screensavers/", - saver->name, ".xml", NULL); - - if (stat (filename, &buf)) + if (stat (saver->filename, &buf)) ret = FALSE; else ret = TRUE; - g_free (filename); return ret; } @@ -1730,6 +1731,7 @@ demo_cb (GtkWidget *widget, ScreensaverPrefsDialog *dialog) store_cli (dialog); gtk_signal_emit (GTK_OBJECT (dialog), screensaver_prefs_dialog_signals[DEMO_SIGNAL]); + show_blank_preview (); show_demo (dialog->saver); } diff --git a/capplets/screensaver/screensavers/3d_clock.xml b/capplets/screensaver/screensavers/3d_clock.xml index 336962996..22a2af445 100644 --- a/capplets/screensaver/screensavers/3d_clock.xml +++ b/capplets/screensaver/screensavers/3d_clock.xml @@ -1,6 +1,6 @@ - + diff --git a/capplets/screensaver/screensavers/Makefile.am b/capplets/screensaver/screensavers/Makefile.am index 2dec74efe..4ecb0ed66 100644 --- a/capplets/screensaver/screensavers/Makefile.am +++ b/capplets/screensaver/screensavers/Makefile.am @@ -1,99 +1,166 @@ -Screensaversdir = $(GNOMECC_SCREENSAVERS_DIR) -Screensavers_DATA = \ - 3d_clock.xml \ - ant.xml \ - atlantis.xml \ - attraction.xml \ - blitspin.xml \ - bouboule.xml \ - braid.xml \ - bsod.xml \ - bubble3d.xml \ - bubbles.xml \ - cage.xml \ - compass.xml \ - coral.xml \ - critical.xml \ - crystal.xml \ - cynosure.xml \ - decayscreen.xml\ - deco.xml \ - deluxe.xml \ - demon.xml \ - discrete.xml \ - distort.xml \ - drift.xml \ - epicycle.xml \ - fadeplot.xml \ - flag.xml \ - flame.xml \ - flow.xml \ - forest.xml \ - glplanet.xml \ - galaxy.xml \ - gears.xml \ - goop.xml \ - grav.xml \ - greynetic.xml \ - halo.xml \ - helix.xml \ - hopalong.xml \ - hypercube.xml \ - ifs.xml \ - imsmap.xml \ - interference.xml\ - jigsaw.xml \ - julia.xml \ - kaleidescope.xml\ - kumppa.xml \ - lament.xml \ - laser.xml \ - lightning.xml \ - lisa.xml \ - lissie.xml \ - lmorph.xml \ - loop.xml \ - maze.xml \ - moebius.xml \ - moire.xml \ - moire2.xml \ - morph3d.xml \ - mountain.xml \ - munch.xml \ - noseguy.xml \ - pedal.xml \ - penetrate.xml \ - penrose.xml \ - pipes.xml \ - pyro.xml \ - qix.xml \ - rd-bomb.xml \ - rocks.xml \ - rorschach.xml \ - rotor.xml \ - rubiks_cube.xml\ - sierpinski.xml \ - slidescreen.xml\ - slip.xml \ - sonar.xml \ - sphere.xml \ - spiral.xml \ - spotlight.xml \ - sproingies.xml \ - squiral.xml \ - stairs.xml \ - starfish.xml \ - strange.xml \ - superquadrics.xml \ - swirl.xml \ - triangle.xml \ - truchet.xml \ - vines.xml \ - worm.xml \ - xflame.xml \ - xjack.xml \ - xlyap.xml \ - xmatrix.xml \ - xroger.xml +pixmapsdir = $(GNOMECC_PIXMAPS_DIR)/screensavers -EXTRA_DIST = $(Screensavers_DATA) README +pixmaps_DATA = \ + decayscreen.png \ + distort.png \ + jigsaw.png \ + slip.png \ + vidwhacker.png \ + webcollage.png + +# This is not _DATA because we install _all_ xml files in install-data-local +Screensavers = \ + 3d_clock.xml \ + ant.xml \ + atlantis.xml \ + attraction.xml \ + blaster.xml \ + blitspin.xml \ + bouboule.xml \ + braid.xml \ + bsod.xml \ + bubble3d.xml \ + bubbles.xml \ + bumps.xml \ + cage.xml \ + ccurve.xml \ + compass.xml \ + coral.xml \ + cosmos.xml \ + critical.xml \ + crystal.xml \ + cynosure.xml \ + dangerball.xml \ + decayscreen.xml \ + deco.xml \ + deluxe.xml \ + demon.xml \ + discrete.xml \ + distort.xml \ + drift.xml \ + electricsheep.xml \ + epicycle.xml \ + extrusion.xml \ + fadeplot.xml \ + flag.xml \ + flame.xml \ + flow.xml \ + forest.xml \ + galaxy.xml \ + gears.xml \ + gflux.xml \ + glplanet.xml \ + gltext.xml \ + goban.xml \ + goop.xml \ + grav.xml \ + greynetic.xml \ + halo.xml \ + helix.xml \ + hopalong.xml \ + hyperball.xml \ + hypercube.xml \ + ifs.xml \ + imsmap.xml \ + interference.xml \ + jigsaw.xml \ + julia.xml \ + kaleidescope.xml \ + kumppa.xml \ + lament.xml \ + laser.xml \ + lightning.xml \ + lisa.xml \ + lissie.xml \ + lmorph.xml \ + loop.xml \ + maze.xml \ + moebius.xml \ + moire2.xml \ + moire.xml \ + molecule.xml \ + morph3d.xml \ + mountain.xml \ + munch.xml \ + nerverot.xml \ + noseguy.xml \ + pedal.xml \ + penetrate.xml \ + penrose.xml \ + petri.xml \ + phosphor.xml \ + pipes.xml \ + pulsar.xml \ + pyro.xml \ + qix.xml \ + rd-bomb.xml \ + ripples.xml \ + rocks.xml \ + rorschach.xml \ + rotor.xml \ + rotzoomer.xml \ + rubiks_cube.xml \ + rubik.xml \ + shadebobs.xml \ + sierpinski3d.xml \ + sierpinski.xml \ + slidescreen.xml \ + slip.xml \ + sonar.xml \ + speedmine.xml \ + sphere.xml \ + spiral.xml \ + spotlight.xml \ + sproingies.xml \ + squiral.xml \ + ssystem.xml \ + stairs.xml \ + starfish.xml \ + starwars.xml \ + stonerview.xml \ + strange.xml \ + superquadrics.xml \ + swirl.xml \ + t3d.xml \ + triangle.xml \ + truchet.xml \ + vidwhacker.xml \ + vines.xml \ + wander.xml \ + webcollage.xml \ + whirlwindwarp.xml \ + whirlygig.xml \ + worm.xml \ + xaos.xml \ + xdaliclock.xml \ + xearth.xml \ + xfishtank.xml \ + xflame.xml \ + xjack.xml \ + xlyap.xml \ + xmatrix.xml \ + xmountains.xml \ + xrayswarm.xml \ + xroger.xml \ + xsnow.xml \ + xspirograph.xml \ + xteevee.xml \ + zoom.xml + +Translatables = $(Screensavers:.xml=.xml.h) +$(Translatables): %.xml.h: %.xml + $(top_srcdir)/xml-i18n-extract --type=gettext/xml $< + +all: $(Translatables) + +EXTRA_DIST = $(Screensavers) README \ + $(Translatables) + +CLEANFILES = $(Translatables) + +ADFILE = $(XSCREENSAVER_PREFIX)/lib/X11/app-defaults/XScreenSaver + +install-data-local: + $(mkinstalldirs) $(DESTDIR)$(GNOMECC_SCREENSAVERS_DIR) + $(INSTALL_DATA) *.xml $(DESTDIR)$(GNOMECC_SCREENSAVERS_DIR) + @PERL@ $(top_srcdir)/capplets/screensaver/screensavers/magic.pl --adfile $(ADFILE) --merge $(DESTDIR)$(GNOMECC_SCREENSAVERS_DIR) diff --git a/capplets/screensaver/screensavers/TODO b/capplets/screensaver/screensavers/TODO new file mode 100644 index 000000000..2992e42ba --- /dev/null +++ b/capplets/screensaver/screensavers/TODO @@ -0,0 +1,3 @@ +* Check for argument mismatch between xscreensaver and xml. +* Handle output from xrdb. +* Get installed, and run on .xscreensaver at runtime. diff --git a/capplets/screensaver/screensavers/ant.xml b/capplets/screensaver/screensavers/ant.xml index d96ad9455..0ae4b2c1f 100644 --- a/capplets/screensaver/screensavers/ant.xml +++ b/capplets/screensaver/screensavers/ant.xml @@ -1,6 +1,6 @@ - + @@ -71,4 +71,5 @@ - + <_description>A cellular automaton that is really a two-dimensional Turing machine: as the heads (``ants'') walk along the screen, they change pixel values in their path. Then, as they pass over changed pixels, their behavior is influenced. Written by David Bagley. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/atlantis.xml b/capplets/screensaver/screensavers/atlantis.xml index 861dc53e5..ff86377f0 100644 --- a/capplets/screensaver/screensavers/atlantis.xml +++ b/capplets/screensaver/screensavers/atlantis.xml @@ -1,7 +1,8 @@ - + - + <_description>This is xfishtank writ large: a GL animation of a number of sharks, dolphins, and whales. The swimming motions are great. Originally written by Mark Kilgard. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/attraction.xml b/capplets/screensaver/screensavers/attraction.xml index 9482f8574..4d74d980a 100644 --- a/capplets/screensaver/screensavers/attraction.xml +++ b/capplets/screensaver/screensavers/attraction.xml @@ -1,6 +1,6 @@ - + - + <_description>BSOD stands for ``Blue Screen of Death.'' The finest in personal computer emulation, this hack simulates popular screen savers from a number of less robust operating systems. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/bubble3d.xml b/capplets/screensaver/screensavers/bubble3d.xml index 339391350..4177bf781 100644 --- a/capplets/screensaver/screensavers/bubble3d.xml +++ b/capplets/screensaver/screensavers/bubble3d.xml @@ -1,7 +1,8 @@ - + - + <_description>Draws a stream of rising, undulating 3D bubbles, rising toward the top of the screen, with nice specular reflections. Written by Richard Jones. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/bubbles.xml b/capplets/screensaver/screensavers/bubbles.xml index e116547fa..e7c412af1 100644 --- a/capplets/screensaver/screensavers/bubbles.xml +++ b/capplets/screensaver/screensavers/bubbles.xml @@ -1,6 +1,6 @@ - + @@ -20,4 +20,5 @@ - + <_description>This simulates the kind of bubble formation that happens when water boils:small bubbles appear, and as they get closer to each other, they combine to form larger bubbles, which eventually pop. Written by James Macnicol. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/bumps.xml b/capplets/screensaver/screensavers/bumps.xml new file mode 100644 index 000000000..1b0eaaf1b --- /dev/null +++ b/capplets/screensaver/screensavers/bumps.xml @@ -0,0 +1,8 @@ + + + + + + + <_description>A bit like `Spotlight', except that instead of merely exposing part of your desktop, it creates a bump map from it. Basically, it 3D-izes a roaming section of your desktop, based on color intensity. Written by Shane Smit. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/cage.xml b/capplets/screensaver/screensavers/cage.xml index 1d44a1aad..be9dc438f 100644 --- a/capplets/screensaver/screensavers/cage.xml +++ b/capplets/screensaver/screensavers/cage.xml @@ -1,7 +1,8 @@ - + - + <_description>This draws Escher's ``Impossible Cage,'' a 3d analog of a moebius strip, and rotates it in three dimensions. Written by Marcelo Vianna. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/ccurve.xml b/capplets/screensaver/screensavers/ccurve.xml new file mode 100644 index 000000000..a78a491e3 --- /dev/null +++ b/capplets/screensaver/screensavers/ccurve.xml @@ -0,0 +1,8 @@ + + + + + + + <_description>Generates self-similar linear fractals, including the classic ``C Curve.'' Written by Rick Campbell. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/compass.xml b/capplets/screensaver/screensavers/compass.xml index 5ebac28b6..82d80375a 100644 --- a/capplets/screensaver/screensavers/compass.xml +++ b/capplets/screensaver/screensavers/compass.xml @@ -1,6 +1,6 @@ - + - + <_description>This draws a compass, with all elements spinning about randomly, for that ``lost and nauseous'' feeling. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/coral.xml b/capplets/screensaver/screensavers/coral.xml index 6691a89aa..6833458c0 100644 --- a/capplets/screensaver/screensavers/coral.xml +++ b/capplets/screensaver/screensavers/coral.xml @@ -1,6 +1,6 @@ - + @@ -16,4 +16,5 @@ type="slider" default="2" arg="-delay %" low="1" _high-label="Slower" high="500000"/> - + <_description>Simulates coral growth, albeit somewhat slowly. This image doesn't really do it justice. Written by Frederick Roeber. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/cosmos.xml b/capplets/screensaver/screensavers/cosmos.xml new file mode 100644 index 000000000..87327b1b0 --- /dev/null +++ b/capplets/screensaver/screensavers/cosmos.xml @@ -0,0 +1,10 @@ + + + + + + <_description>Draws fireworks and zooming, fading flares. By Tom Campbell. You can find it at <http://www.mindspring.com/~campbell/cosmos/>. + +! (xrdb prevention kludge: whole file) */ + + diff --git a/capplets/screensaver/screensavers/critical.xml b/capplets/screensaver/screensavers/critical.xml index 2954b00c7..1a16df98b 100644 --- a/capplets/screensaver/screensavers/critical.xml +++ b/capplets/screensaver/screensavers/critical.xml @@ -1,7 +1,8 @@ - + - + <_description>Draws a system of self-organizing lines. It starts out as random squiggles, but after a few iterations, order begins to appear. Written by Martin Pool. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/crystal.xml b/capplets/screensaver/screensavers/crystal.xml index c7d45a9fe..cd6b6bc5b 100644 --- a/capplets/screensaver/screensavers/crystal.xml +++ b/capplets/screensaver/screensavers/crystal.xml @@ -1,6 +1,6 @@ - + @@ -28,4 +28,5 @@ - + <_description>Moving polygons, similar to a kaleidescope (more like a kaleidescope than the hack called `kaleid,' actually.) This one by Jouk Jansen. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/cynosure.xml b/capplets/screensaver/screensavers/cynosure.xml index b4e8cdacd..bed67ee7a 100644 --- a/capplets/screensaver/screensavers/cynosure.xml +++ b/capplets/screensaver/screensavers/cynosure.xml @@ -1,6 +1,6 @@ - + @@ -19,4 +19,5 @@ - + <_description>A hack similar to `greynetic', but less frenetic. The first implementation was by Stephen Linhart; then Ozymandias G. Desiderata wrote a Java applet clone. That clone was discovered by Jamie Zawinski, and ported to C for inclusion here. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/dangerball.xml b/capplets/screensaver/screensavers/dangerball.xml new file mode 100644 index 000000000..ab4db8a8b --- /dev/null +++ b/capplets/screensaver/screensavers/dangerball.xml @@ -0,0 +1,8 @@ + + + + + + <_description>Draws a ball that periodically extrudes many random spikes. Ouch! Written by Jamie Zawinski. + + diff --git a/capplets/screensaver/screensavers/decayscreen.png b/capplets/screensaver/screensavers/decayscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..e40d6333b92aca7a78dcfcd41631bdfd141082f9 GIT binary patch literal 23608 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%0Dl6majQk3ya}>g@mOhcyx16xWsOk- zJwnYz>R2KjU55QuAbwklVY{h5_rRqogRoHh^V4GP(=kl3BD>?YNu=xZ>$V3Qch#7#`CmFI{mbT>l3gaOq`IBQf{s#}arOHGyNxiKEJ8-Gu*e!E@F{VP)T zbS)$=NF17|q%27usQyFm#qashH4|n21iys{zGvl@=U@>Ig|{QeEqip>-EgY)=8UUi zN*4QE-wDcNxc8a2X-UHGSsHWPrZ8JhxL-u=uF~uF3AG)#Wwycy+I$8oK}U_VEoaj` z+E3eH#8>g+h-;Wy*B&L6FVcwF`*g1&Y77fKarLY1&xxEi`#|t^`vlTHC)9eb8_L1? z$=@TNGAsCwWZ?JghCu7h+Pe*S{8VhpgRMuJCtx6IYncr9_eb@+3Yjc@A`Y4nF7@sn zzOI2&?mZm30m=G`b#lAC#LI6{MpuOz)}R#tBfLqqKVMS#gf8{7dStLN1P5|C?jSje zK2htop$mw<$WnouT6rbMwTBiaS<;T=C+A%92x72yT@AXdTNXeCEl)t0iKYxpdt0i$ zcl4orEHC|hMPJ0g45K2HHie>ilGSD+n{78%OW((Qz<_hucF@y2%5E zi@xIdBD-apHiv7tkD>18qpjzIn#Of35~grc&)uRE6UFBYC}1+PJle08qT35F89+Wc z56b`_RWw=>n6WCzm~h}Gv8@pqfGJ9F(Mr(xe@)OGYv z4qV*naQKO~Ol$O>f@ZIgsX~P2>4L0qr7`83=5{gVE z$2|Sp#g}4xU@C|FBaLBEVzvQgY2r&(A!%+sZjE`$1JN7uzmeZC`-Nb8Y|P^V_c@Y4 zyHML@4)CUhtxSL^Oj_5=(4sp>cage~D%k|BE_-V)MRwC@<^VAx{6V=@1hsy>)?{{^ zd;uKHqSI&v$L}`-^&g&x?dsdz=`Hz|t3j6u?LDP82(vzp4JO&CdAvcwVbrp*Kiq(|;7<(Kh zA|paINiD7{tV8v^)JI2z*F}TbFIdc5^OZk#k@4{3yEz4gLs^7Lz=N>mlHlN%v@SQM z+RcMNE43*h+bc)vYB71H(vhh{+7EoYNbqS97YgKL2cwqR)kZA z?{nYPe6df{b!&4^do5MRN@vsAiz7PPPLG4V==wq!`*MSfOHE${B=4ZKa&Ng!Eg8Ps z-6U*n>vv>`nEGjIut<6HjHP>u4#)5={xEZ(@%Yfi6}x0#Z=Q3YG5wAA7DiXCcb0H& z0Y5NC@0gs$Jg>H_=kxecS+O;VhqWbJS`^-!Y+koyP}mH!?q>P;y(2MRsXq-Tg(;kzbnJ#2e}4}yPPKI*5xA9wOwoEt#QkzV()CcJDVu6ED)NT%lLMTh!yJxl z!|;CAmsF!M;@d08ofWgL!u5OQSlr0bZv~jWPyFdSlk#?Y=UN5G)?f|Wch_0mWA&8k zKm3iqkk56yJci_w#(N(PLnsy&bkZRQ%|2^n`c)z*jUU15)3k%rcXeL{g(JAAG{!_? z#Hkme5K_DMN@V3J*sL>+&0_D)*tI*+JQ&u%ywzVMkfq=C literal 0 HcmV?d00001 diff --git a/capplets/screensaver/screensavers/decayscreen.xml b/capplets/screensaver/screensavers/decayscreen.xml index 60e167d35..488c2c281 100644 --- a/capplets/screensaver/screensavers/decayscreen.xml +++ b/capplets/screensaver/screensavers/decayscreen.xml @@ -1,6 +1,6 @@ - + @@ -11,4 +11,6 @@ + decayscreen.png + <_description>This takes an image and makes it melt. You've no doubt seen this effect before, but no screensaver would really be complete without it. It works best if there's something colorful visible. Warning, if the effect continues after the screen saver is off, seek medical attention. Written by David Wald and Vivek Khera. diff --git a/capplets/screensaver/screensavers/deco.xml b/capplets/screensaver/screensavers/deco.xml index b733bcf4c..7e3aa3b56 100644 --- a/capplets/screensaver/screensavers/deco.xml +++ b/capplets/screensaver/screensavers/deco.xml @@ -1,6 +1,6 @@ - + @@ -14,4 +14,5 @@ - + <_description>This one subdivides and colors rectangles randomly. It looks kind of like Brady-Bunch-era rec-room wall paneling. (Raven says: ``this screensaver is ugly enough to peel paint.'') Written by Jamie Zawinski, inspired by Java code by Michael Bayne. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/deluxe.xml b/capplets/screensaver/screensavers/deluxe.xml index 318e805ee..369ad683c 100644 --- a/capplets/screensaver/screensavers/deluxe.xml +++ b/capplets/screensaver/screensavers/deluxe.xml @@ -1,7 +1,8 @@ - + - + <_description>This draws a pulsing sequence of stars, circles, and lines. It would look better if it was faster, but as far as I can tell, there is no way to make this be both: fast, and flicker-free. Yet another reason X sucks. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/demon.xml b/capplets/screensaver/screensavers/demon.xml index 06fc093b8..c13aeb635 100644 --- a/capplets/screensaver/screensavers/demon.xml +++ b/capplets/screensaver/screensavers/demon.xml @@ -1,7 +1,8 @@ - + - + <_description>A cellular automaton that starts with a random field, and organizes it into stripes and spirals. Written by David Bagley. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/discrete.xml b/capplets/screensaver/screensavers/discrete.xml index 10f438c5e..7ab1bf08d 100644 --- a/capplets/screensaver/screensavers/discrete.xml +++ b/capplets/screensaver/screensavers/discrete.xml @@ -1,6 +1,6 @@ - + @@ -19,4 +19,5 @@ - + <_description>More ``discrete map'' systems, including new variants of Hopalong and Julia, and a few others. Written by Tim Auckland. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/distort.png b/capplets/screensaver/screensavers/distort.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c73cbbb62fb90619fb3025b3739ec763d5add8 GIT binary patch literal 58680 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�ErPFt8Eq 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 E|4=R*=>Px# literal 0 HcmV?d00001 diff --git a/capplets/screensaver/screensavers/distort.xml b/capplets/screensaver/screensavers/distort.xml index 9bc23e2a7..32aea8069 100644 --- a/capplets/screensaver/screensavers/distort.xml +++ b/capplets/screensaver/screensavers/distort.xml @@ -1,7 +1,10 @@ - + + distort.png + + <_description>This hack grabs an image of the screen, and then lets a transparent lens wander around the screen, magnifying whatever is underneath. Written by Jonas Munsin. diff --git a/capplets/screensaver/screensavers/drift.xml b/capplets/screensaver/screensavers/drift.xml index a29be9308..74246bb2c 100644 --- a/capplets/screensaver/screensavers/drift.xml +++ b/capplets/screensaver/screensavers/drift.xml @@ -1,6 +1,6 @@ - + @@ -25,4 +25,5 @@ - + <_description>How could one possibly describe this except as ``drifting recursive fractal cosmic flames?'' Another fine hack from the Scott Draves collection of fine hacks. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/electricsheep.xml b/capplets/screensaver/screensavers/electricsheep.xml new file mode 100644 index 000000000..30277763e --- /dev/null +++ b/capplets/screensaver/screensavers/electricsheep.xml @@ -0,0 +1,10 @@ + + + + + <_description>ElectricSheep is an xscreensaver module that displays mpeg video of an animated fractal flame. In the background, it contributes render cycles to the next animation. Periodically it uploades completed frames to the server, where they are compressed for distribution to all clients. + +This program is recommended only if you have a high bandwidth connection to the Internet. + +By Scott Draves. You can find it at <http://www.electricsheep.org/>. See that web site for configuration information. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/epicycle.xml b/capplets/screensaver/screensavers/epicycle.xml index 91de5bad7..90248cc62 100644 --- a/capplets/screensaver/screensavers/epicycle.xml +++ b/capplets/screensaver/screensavers/epicycle.xml @@ -1,6 +1,6 @@ - + @@ -15,4 +15,5 @@ - + <_description>This program draws the path traced out by a point on the edge of a circle. That circle rotates around a point on the rim of another circle, and so on, several times. These were the basis for the pre-heliocentric model of planetary motion. Written by James Youngman. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/extrusion.xml b/capplets/screensaver/screensavers/extrusion.xml new file mode 100644 index 000000000..b5aaf9b79 --- /dev/null +++ b/capplets/screensaver/screensavers/extrusion.xml @@ -0,0 +1,6 @@ + + + + + <_description>Draws various rotating extruded shapes that twist around, lengthen, and turn inside out. Created by David Konerding from the samples that come with the GL Extrusion library by Linas Vepstas. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/fadeplot.xml b/capplets/screensaver/screensavers/fadeplot.xml index 8ede30e39..e9d2c4b41 100644 --- a/capplets/screensaver/screensavers/fadeplot.xml +++ b/capplets/screensaver/screensavers/fadeplot.xml @@ -1,6 +1,6 @@ - + @@ -23,4 +23,5 @@ - + <_description>Draws what looks like a waving ribbon following a sinusoidal path. Written by Bas van Gaalen and Charles Vidal. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/flag.xml b/capplets/screensaver/screensavers/flag.xml index 045814b17..1ed46ac02 100644 --- a/capplets/screensaver/screensavers/flag.xml +++ b/capplets/screensaver/screensavers/flag.xml @@ -1,6 +1,6 @@ - + @@ -47,4 +47,5 @@ - + <_description>This draws a waving colored flag, that undulates its way around the screen. The trick is the flag can contain arbitrary text and images. By default, it displays either the current system name and OS type, or a picture of ``Bob,'' but you can replace the text or the image with a command-line option. Written by Charles Vidal and Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/flame.xml b/capplets/screensaver/screensavers/flame.xml index 804235acb..014b41e3b 100644 --- a/capplets/screensaver/screensavers/flame.xml +++ b/capplets/screensaver/screensavers/flame.xml @@ -1,6 +1,6 @@ - + @@ -24,4 +24,5 @@ - + <_description>Another iterative fractal generator. Written by Scott Draves. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/flow.xml b/capplets/screensaver/screensavers/flow.xml index fc795665d..e8bad75a3 100644 --- a/capplets/screensaver/screensavers/flow.xml +++ b/capplets/screensaver/screensavers/flow.xml @@ -1,7 +1,8 @@ - + - + <_description>Another series of strange attractors: a flowing series of points, making strange rotational shapes. Written by Jeff Butterworth. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/forest.xml b/capplets/screensaver/screensavers/forest.xml index 6c3518b36..47c3f338e 100644 --- a/capplets/screensaver/screensavers/forest.xml +++ b/capplets/screensaver/screensavers/forest.xml @@ -1,6 +1,6 @@ - + @@ -8,15 +8,17 @@ type="spinbutton" default="100" arg="-ncolors %" low="1" high="256"/> - + - + <_description>This draws fractal trees. Written by Peter Baumung. Everybody loves fractals, right? + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/galaxy.xml b/capplets/screensaver/screensavers/galaxy.xml index a033d86cf..fae3dff59 100644 --- a/capplets/screensaver/screensavers/galaxy.xml +++ b/capplets/screensaver/screensavers/galaxy.xml @@ -1,7 +1,8 @@ - + - + <_description>This draws spinning galaxies, which then collide and scatter their stars to the, uh, four winds or something. Originally an Amiga program by Uli Siegmund. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/gears.xml b/capplets/screensaver/screensavers/gears.xml index 5de7b1a06..ed869380c 100644 --- a/capplets/screensaver/screensavers/gears.xml +++ b/capplets/screensaver/screensavers/gears.xml @@ -1,7 +1,9 @@ - + - + <_description>This draws sets of turning, interlocking gears, rotating in three dimensions. Another GL hack, by Danny Sung, Brian Paul, Ed Mackey, and Jamie Zawinski. + + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/gflux.xml b/capplets/screensaver/screensavers/gflux.xml new file mode 100644 index 000000000..3ffd4ee95 --- /dev/null +++ b/capplets/screensaver/screensavers/gflux.xml @@ -0,0 +1,8 @@ + + + + + + <_description>Draws a rippling waves on a rotating wireframe grid, using GL. Written by Josiah Pease. + + diff --git a/capplets/screensaver/screensavers/glplanet.xml b/capplets/screensaver/screensavers/glplanet.xml index 0fbb5bf34..8a6fc0585 100644 --- a/capplets/screensaver/screensavers/glplanet.xml +++ b/capplets/screensaver/screensavers/glplanet.xml @@ -1,7 +1,8 @@ - + - + <_description>Draws a planet bouncing around in space. Written by David Konerding. The built-in image is a map of the earth (extracted from `xearth'), but you can wrap any texture around the sphere, e.g., the planetary textures that come with `ssystem'. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/gltext.xml b/capplets/screensaver/screensavers/gltext.xml new file mode 100644 index 000000000..8a1f880e3 --- /dev/null +++ b/capplets/screensaver/screensavers/gltext.xml @@ -0,0 +1,9 @@ + + + + + + <_description>Displays a few lines of text spinning around in a solid 3D font. Written by Jamie Zawinski. + + + diff --git a/capplets/screensaver/screensavers/goban.xml b/capplets/screensaver/screensavers/goban.xml new file mode 100644 index 000000000..bd887a8a9 --- /dev/null +++ b/capplets/screensaver/screensavers/goban.xml @@ -0,0 +1,6 @@ + + + + + <_description>Replays historical games of go (aka wei-chi and baduk) on the screen. By Scott Draves. You can find it at <http://www.draves.org/goban/>. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/goop.xml b/capplets/screensaver/screensavers/goop.xml index afa325144..016b33b95 100644 --- a/capplets/screensaver/screensavers/goop.xml +++ b/capplets/screensaver/screensavers/goop.xml @@ -1,6 +1,6 @@ - + @@ -23,4 +23,5 @@ arg-unset="-subtractive" id="additive" arg-set="-additive"/> - + <_description>This draws set of animating, transparent, amoeba-like blobs. The blobs change shape as they wander around the screen, and they are translucent, so you can see the lower blobs through the higher ones, and when one passes over another, their colors merge. Written by Jamie Zawinski. I got the idea for this from a cool mouse pad I have, which achieves the same kind of effect in real life by having several layers plastic with colored oil between them. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/grav.xml b/capplets/screensaver/screensavers/grav.xml index 5eb017db7..6db20558b 100644 --- a/capplets/screensaver/screensavers/grav.xml +++ b/capplets/screensaver/screensavers/grav.xml @@ -1,6 +1,6 @@ - + @@ -21,4 +21,6 @@ - + <_description>This program draws a simple orbital simulation. If you turn on trails, it looks kind of like a cloud-chamber photograph. Written by Greg Bowering. + + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/greynetic.xml b/capplets/screensaver/screensavers/greynetic.xml index ceb3a75f3..a3af0cc3d 100644 --- a/capplets/screensaver/screensavers/greynetic.xml +++ b/capplets/screensaver/screensavers/greynetic.xml @@ -1,6 +1,6 @@ - + @@ -11,4 +11,5 @@ - + <_description>This draws random colored and stippled rectangles. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/halo.xml b/capplets/screensaver/screensavers/halo.xml index 96d4d66d0..a5c1598a4 100644 --- a/capplets/screensaver/screensavers/halo.xml +++ b/capplets/screensaver/screensavers/halo.xml @@ -1,11 +1,11 @@ - + - + <_description>This draws trippy psychedelic circular patterns that hurt to look at. It can also animate the control-points, but that takes a lot of CPU and bandwidth. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/helix.xml b/capplets/screensaver/screensavers/helix.xml index 054aaf8db..0a8bca6cf 100644 --- a/capplets/screensaver/screensavers/helix.xml +++ b/capplets/screensaver/screensavers/helix.xml @@ -1,6 +1,6 @@ - + @@ -11,4 +11,5 @@ - + <_description>This repeatedly generates spirally string-art-ish patterns. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/hopalong.xml b/capplets/screensaver/screensavers/hopalong.xml index 05ba70cff..818af7344 100644 --- a/capplets/screensaver/screensavers/hopalong.xml +++ b/capplets/screensaver/screensavers/hopalong.xml @@ -1,6 +1,6 @@ - + @@ -19,4 +19,5 @@ - + <_description>This draws lacy fractal patterns, based on iteration in the imaginary plane, from a 1986 Scientific American article. Mostly written by Patrick Naughton. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/hyperball.xml b/capplets/screensaver/screensavers/hyperball.xml new file mode 100644 index 000000000..20100c9a7 --- /dev/null +++ b/capplets/screensaver/screensavers/hyperball.xml @@ -0,0 +1,8 @@ + + + + + + <_description>Hyperball is to hypercube as dodecahedron is to cube: this displays a 2D projection of the sequence of 3D objects which are the projections of the 4D analog to the dodecahedron. Written by Joe Keane. + + diff --git a/capplets/screensaver/screensavers/hypercube.xml b/capplets/screensaver/screensavers/hypercube.xml index 27317e91f..d2328fc39 100644 --- a/capplets/screensaver/screensavers/hypercube.xml +++ b/capplets/screensaver/screensavers/hypercube.xml @@ -1,6 +1,6 @@ - + @@ -15,4 +15,5 @@ - + <_description>This displays 2D projections of the sequence of 3D objects which are the projections of the 4D analog to the cube: as a square is composed of four lines, each touching two others; and a cube is composed of six squares, each touching four others; a hypercube is composed of eight cubes, each touching six others. To make it easier to visualize the rotation, it uses a different color for the edges of each face. Don't think about it too long, or your brain will melt. Written by Joe Keane, Fritz Mueller, and Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/ifs.xml b/capplets/screensaver/screensavers/ifs.xml index 63ff07177..14e787c8c 100644 --- a/capplets/screensaver/screensavers/ifs.xml +++ b/capplets/screensaver/screensavers/ifs.xml @@ -1,6 +1,6 @@ - + @@ -11,4 +11,5 @@ - + <_description>This one draws spinning, colliding iterated-function-system images. Written by Massimino Pascal. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/imsmap.xml b/capplets/screensaver/screensavers/imsmap.xml index 437a7262b..d25606188 100644 --- a/capplets/screensaver/screensavers/imsmap.xml +++ b/capplets/screensaver/screensavers/imsmap.xml @@ -1,7 +1,10 @@ - + - + <_description>This generates random cloud-like patterns. It looks quite different in monochrome and color. The basic idea is to take four points on the edge of the image, and assign each a random ``elevation''. Then find the point between them, and give it a value which is the average of the other four, plus some small random offset. Then coloration is done based on elevation. + +The color selection is done by binding the elevation to either hue, saturation, or brightness, and assigning random values to the others. The ``brightness'' mode tends to yield cloudlike patterns, and the others tend to generate images that look like heat-maps or CAT-scans. Written by Juergen Nickelsen and Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/interference.xml b/capplets/screensaver/screensavers/interference.xml index 29cdb1159..09ca0f252 100644 --- a/capplets/screensaver/screensavers/interference.xml +++ b/capplets/screensaver/screensavers/interference.xml @@ -1,7 +1,8 @@ - + - + <_description>Another color-field hack, this one works by computing decaying sinusoidal waves, and allowing them to interfere with each other as their origins move. Written by Hannu Mallat. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/jigsaw.png b/capplets/screensaver/screensavers/jigsaw.png new file mode 100644 index 0000000000000000000000000000000000000000..9a324d9f9f604c396fcb5545eaf9c7167e43c0a0 GIT binary patch literal 15194 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 B8&v=R literal 0 HcmV?d00001 diff --git a/capplets/screensaver/screensavers/jigsaw.xml b/capplets/screensaver/screensavers/jigsaw.xml index 4a7f5ede4..6b786af1b 100644 --- a/capplets/screensaver/screensavers/jigsaw.xml +++ b/capplets/screensaver/screensavers/jigsaw.xml @@ -1,6 +1,6 @@ - + @@ -8,4 +8,7 @@ type="slider" default="2" arg="-delay %" low="1" high-label="Slower" high="500000"/> + jigsaw.png + + <_description>This grabs a screen image, carves it up into a jigsaw puzzle, shuffles it, and then solves the puzzle. This works especially well when you feed it an external video signal instead of letting it grab the screen image (actually, I guess this is generally true...) When it is grabbing a video image, it is sometimes pretty hard to guess what the image is going to look like once the puzzle is solved. Written by Jamie Zawinski. diff --git a/capplets/screensaver/screensavers/julia.xml b/capplets/screensaver/screensavers/julia.xml index 103d2edd5..7319ce736 100644 --- a/capplets/screensaver/screensavers/julia.xml +++ b/capplets/screensaver/screensavers/julia.xml @@ -1,6 +1,6 @@ - + @@ -19,4 +19,5 @@ - + <_description>This one draws spinning, animating (are you detecting a pattern here yet?) explorations of the Julia set. You've probably seen static images of this fractal form before, but it's a lot of fun to watch in motion as well. One interesting thing is that there is a small swinging dot passing in front of the image, which indicates the control point from which the rest of the image was generated. Written by Sean McCullough. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/kaleidescope.xml b/capplets/screensaver/screensavers/kaleidescope.xml index 578852ad0..4c3901133 100644 --- a/capplets/screensaver/screensavers/kaleidescope.xml +++ b/capplets/screensaver/screensavers/kaleidescope.xml @@ -1,6 +1,6 @@ - + @@ -20,4 +20,5 @@ arg-unset="-color_mode nice" id="monochrome" arg-set="-color_mode mono"/> - + <_description>Another clone of an ancient meme, consisting largely of frenetic rotational motion of colored lines. This one is by Ron Tapia. The motion is nice, but I think it needs more solids, or perhaps just brighter colors. More variations in the rotational speed might help, too. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/kumppa.xml b/capplets/screensaver/screensavers/kumppa.xml index dedde07da..0379c1c10 100644 --- a/capplets/screensaver/screensavers/kumppa.xml +++ b/capplets/screensaver/screensavers/kumppa.xml @@ -1,7 +1,8 @@ - + - + <_description>Spiraling, spinning, and very, very fast splashes of color rush toward the screen. Written by Teemu Suutari. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/lament.xml b/capplets/screensaver/screensavers/lament.xml index adb326bd4..acf0430ba 100644 --- a/capplets/screensaver/screensavers/lament.xml +++ b/capplets/screensaver/screensavers/lament.xml @@ -1,7 +1,8 @@ - + - + <_description>Animates a simulation of Lemarchand's Box, repeatedly solving itself. Requires OpenGL, and a machine with fast hardware support for texture maps. Warning: occasionally opens doors. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/laser.xml b/capplets/screensaver/screensavers/laser.xml index 6cf27b1f5..50018f4b0 100644 --- a/capplets/screensaver/screensavers/laser.xml +++ b/capplets/screensaver/screensavers/laser.xml @@ -1,6 +1,6 @@ - + @@ -15,4 +15,5 @@ - + <_description>Moving radiating lines, that look vaguely like scanning laser beams. Written by Pascal Pensa. (Frankie say: relax.) + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/lightning.xml b/capplets/screensaver/screensavers/lightning.xml index 774c2bad8..0a4d40824 100644 --- a/capplets/screensaver/screensavers/lightning.xml +++ b/capplets/screensaver/screensavers/lightning.xml @@ -1,6 +1,6 @@ - + @@ -11,4 +11,5 @@ - + <_description>This one draws crackling fractal lightning bolts. It's simple, direct, and to the point. If only it had sound... Written by Keith Romberg. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/lisa.xml b/capplets/screensaver/screensavers/lisa.xml index 7ad503623..5444606e7 100644 --- a/capplets/screensaver/screensavers/lisa.xml +++ b/capplets/screensaver/screensavers/lisa.xml @@ -1,6 +1,6 @@ - + @@ -23,4 +23,5 @@ - + <_description>This draws Lisajous loops, by Caleb Cullen. Remember that device they had the Phantom Zone prisoners in during their trial in Superman? I think that was one of these. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/lissie.xml b/capplets/screensaver/screensavers/lissie.xml index 3efbdfac9..972faae46 100644 --- a/capplets/screensaver/screensavers/lissie.xml +++ b/capplets/screensaver/screensavers/lissie.xml @@ -1,7 +1,8 @@ - + - + <_description>Another Lissajous figure. This one draws the progress of circular shapes along a path. Written by Alexander Jolk. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/lmorph.xml b/capplets/screensaver/screensavers/lmorph.xml index 69cf68c0c..0d38e537d 100644 --- a/capplets/screensaver/screensavers/lmorph.xml +++ b/capplets/screensaver/screensavers/lmorph.xml @@ -1,6 +1,6 @@ - + @@ -22,4 +22,5 @@ - + <_description>This generates random spline-ish line drawings and morphs between them. Written by Sverre H. Huseby and Glenn T. Lines. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/loop.xml b/capplets/screensaver/screensavers/loop.xml index f17e55fbf..dee6a6b3a 100644 --- a/capplets/screensaver/screensavers/loop.xml +++ b/capplets/screensaver/screensavers/loop.xml @@ -1,7 +1,8 @@ - + - + <_description>This one produces loop-shaped colonies that spawn, age, and eventually die. Written by David Bagley. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/magic.pl.in b/capplets/screensaver/screensavers/magic.pl.in new file mode 100755 index 000000000..ffcf94f9d --- /dev/null +++ b/capplets/screensaver/screensavers/magic.pl.in @@ -0,0 +1,510 @@ +#!@PERL@ -w +# +# magic.pl +# +# Script to convert Xscreensaver cruft into xml files. +# Copyright (C) 2001 Ximian, Inc. +# Authors: +# Richard Hestilow +# This program is licensed under the GNU GPL. See COPYING for details. + +use Getopt::Long; + +my $rcfile; # .xscreensaver usually +my $adfile; # app defaults file +my $outdir; +my @merge; +my @avoid; +my $suffix = ".xml"; +my $quiet; + +my $help; + +sub usage +{ + print << "EOF" +XScreensaver->XML conversion utility +Copyright (C) 2001 Ximian, Inc. + +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. + +Usage: $0 [options] + +Options: + --rcfile XScreensaver RC file + --adfile XScreensaver AppDefaults file + --outdir

Directory to output to (defaults to current dir) + --merge Merge with preexisting XML files. If used in + conjunction with --outdir, will make copies in + the specified output directory rather than modifying + the existing files. + --avoid The opposite of --merge: Will not output XML files + that already exist in the specified directories. + Note that merging and avoiding the same directory + is meaningless. + --suffix Suffix for output files. Defaults to "$suffix". + --quiet Be quiet. + --help Display this error message. +EOF +; +exit 1; +} + +sub badopt +{ + my $opt = $_[0]; + + print "Unknown option $opt\n\n"; + usage (); +} + +sub find_file +{ + my ($file, @dirs) = @_; + + foreach $dir (@dirs) + { + if (-f "$dir/$file") + { + return "$dir/$file"; + } + } + + return ""; +} + +GetOptions ("rcfile=s", \$rcfile, + "adfile=s", \$adfile, + "outdir=s", \$outdir, + "merge=s", \@merge, + "avoid=s", \@avoid, + "suffix=s", \$suffix, + "quiet+", \$quiet, + "help+", \$help, + "<>", \&badopt); + +if ($help) +{ + usage (); +} + +my %savers = (); +my @updated_list; +my @added_list; + +# Sigh +foreach $thefile ($rcfile, $adfile) +{ +unless ($thefile) { next; } + +if ($thefile) +{ + unless (open RCFILE, "<$thefile") + { + die "Cannot open rcfile $thefile\n"; + } + + my $fcontents = ""; + my $progseen = 0; + while () + { + if (/\*programs:/) + { + $progseen = 1; + } + elsif ($progseen) + { + $fcontents .= $_; + } + if (/\\n\n/) + { + $fcontents =~ s/\\n$//g; + last; + } + } + + foreach $_ (split /\\n\\\n/, $fcontents) + { + $_ =~ s/\\/ /g; + my $name; + my $label; + my $command; + if ($_ =~ /\".+\".+\".+\"/) + { + # multiple quotes + if ($_ =~ /\"(.+)\"\s+((\w+) .+\".+\".+)[\t ]*/) + { + $label = $1; + $name = $3; + $command = $2; + } + } + elsif ($_ =~ /\"(.+)\"\s*([\w\-]+) ((.+\w)?)[\t ]+/) + { + $label = $1; + $name = $2; + $command = $3; + } + elsif ($_ =~ /\-?(\w[\w\-]+) ((.+\w)?)[\t ]+/) + { + if ($1 eq "-") { print "$1 $2\n";} + my %saver = ("name" => $1, + "command" => $2); + $savers{$1} = \%saver; + next; + } + + if ($name eq "rd-bomb") { print "$label $name $command\n";} + if ($name eq "cosmos") { print "$label $name $command\n";} + if ($name) + { + if ($savers{$name} and $label) + { + if ($name eq "xmountains") { print "erk\n"}; + my %saver = %{$savers{$name}}; + my @fakes; + if ($saver{"fakes"}) + { + @fakes = @{$saver{"fakes"}}; + } + push @fakes, $label; + $saver{"fakes"} = \@fakes; + $savers{$name} = \%saver; + } + else + { + my %saver = ("label" => $label, + "name" => $name, + "command" => $command); + $savers{$name} = \%saver; + } + } + } + + close RCFILE; +} +} + +if ($adfile) +{ + my $fcontents = ""; + + unless (open ADFILE, "<$adfile") + { + die "Cannot open app-defaults file $adfile\n"; + } + + while () + { + $fcontents .= $_; + } + + foreach $_ (split /\n\*/, $fcontents) + { + unless (/hacks\.(.+)\.(.+)\:(.+)/) + { + next; + } + unless ($2 eq "documentation" or $2 eq "name") + { + next; + } + $_ =~ s/hacks\.(.+)\.(.+)\://g; + my $name = $1; + my $type = $2; + $_ =~ s/[\t ]*\\[\t ]*\n/ /g; + $_ =~ s/\n[\t ]/\n/g; + $_ =~ s/\.[\t ]+/\. /g; + $_ =~ s/[\t ]+\n/\n/g; + $_ =~ s/^\n//g; + $_ =~ s/\\n/\n/g; + $_ =~ s/^[\t ]+//g; + $_ =~ s/\n[\t ]/\n/g; + $_ =~ s/\/>/g; + $_ =~ s/[\t ]*\n$//g; + $_ =~ s/\n\n\! \(xrdb prevention kludge\: whole file\) \*\///g; + my $desc; + my $label; + if ($type eq "documentation") + { + $desc = $_; + } + else + { + $label = $_; + } + + my %saver = (); + if ($savers{$name}) + { + %saver = %{$savers{$name}}; + } + $saver{"name"} = $name; + if ($desc) + { + $saver{"desc"} = $desc; + } + if ($label) + { + if ($saver{$label}) + { + my @fakes; + if ($saver{"fakes"}) + { + @fakes = @{$saver{"fakes"}}; + } + push @fakes, $label; + $saver{"fakes"} = \@fakes; + } + else + { + $saver{"label"} = $label; + } + } + + $savers{$name} = \%saver; + } + close ADFILE; +} + +my $key; +foreach $key (keys %savers) +{ + my %saver = %{$savers{$key}}; + my $name = $saver{"name"}; + my $label = $saver{"label"}; + if ($key eq "xmountains") + { + print "$name\n"; + } + my $command = $saver{"command"}; + my $desc = $saver{"desc"}; + my @fakes; + my $filename = "$name$suffix"; + my $fullname; + my $mergefile; + my $mergeexists = 0; + my $samefile = 0; + my $buf = ""; + my $str; + + if ($saver{"fakes"}) { + @fakes = @{$saver{"fakes"}}; + } + + if (!$label) + { + # luckily, we can pretty much assume $name is ascii. + $label = $name; + my @tmparr = split //, $label; + if (scalar (@tmparr)) + { + $tmparr[0] =~ tr/[a-z]/[A-Z]/; + $label = join "", @tmparr; + } + } + + if (@avoid) + { + my $avoidfile = find_file ($filename, @avoid); + if ($avoidfile and -f $avoidfile) + { + next; + } + } + + if (@merge) + { + $mergefile = find_file ($filename, @merge); + # FIXME: What about multiple-merge case? + if (!$mergefile and scalar (@merge) == 1) + { + $mergefile = $merge[0] . "/$filename"; + } + if ($mergefile and !$outdir) + { + $fullname = $mergefile; + if (-f $mergefile) + { + $samefile = 1; + } + } + } + + if (!defined $fullname) + { + if ($outdir) + { + unless (-d $outdir) + { + unless (mkdir $outdir) + { + die "Cannot create directory $outdir"; + } + } + + $fullname = "$outdir/$filename"; + } + else + { + $fullname = "$filename"; + } + } + + if (@merge and -f $mergefile) + { + $mergeexists = 1; + } + + if (!$samefile) + { + unless (open OUTFILE, ">$fullname") + { + die "Cannot open output file $fullname\n"; + } + } + + # note that we do not print out commands for merging. + # this is because we assume the file has argument metadata + if ($mergefile and $mergeexists) + { + unless (open XMLFILE, "<$mergefile") + { + die "Cannot open file $mergefile for merging\n"; + } + my $opendesc = 0; + my $foo; + foreach $foo () + { + if ($foo =~ /\/) + { + $str = ".*\<\/_description\>/) + { + $opendesc = 0; + } + elsif ($desc and $foo =~ /\<_description\>/) + { + $opendesc = 1; + } + elsif ($desc and $foo =~ /\<\/_description\>/) + { + $opendesc = 0; + } + elsif ($desc and $opendesc) + { + # part of an old description, do nothing + } + elsif ($foo =~ /\<\/screensaver\>/) + { + $str = ""; + if ($desc and !$opendesc) + { + $str .= " <_description>$desc\n"; + } + + foreach $fake (@fakes) + { + $str .= " \n"; + } + + $str .= ""; + + if ($samefile) + { + $buf .= $str; + } + else + { + print OUTFILE $str; + } + last; + } + else + { + if ($samefile) + { + $buf .= $foo; + } + else + { + print OUTFILE $foo; + } + } + } + + close OUTFILE; + unless (open OUTFILE, ">$mergefile") + { + die "Cannot open output file $mergefile"; + } + + print OUTFILE $buf; + close OUTFILE; + + push @updated_list, $fullname; + } + else + { + print OUTFILE "\n"; + print OUTFILE "\n\n"; + if ($command) + { + print OUTFILE " \n\n"; + } + if ($desc) + { + print OUTFILE " <_description>$desc\n\n"; + } + foreach $fake (@fakes) + { + print OUTFILE " \n"; + } + print OUTFILE "\n"; + close OUTFILE; + + push @added_list, $fullname; + } +} + +if ($quiet) +{ + exit 0; +} + +my $file; + +if (scalar (@added_list)) +{ + print "The following files have been added:\n"; + foreach $file (@added_list) + { + print "$file\n"; + } + print "\n"; +} diff --git a/capplets/screensaver/screensavers/maze.xml b/capplets/screensaver/screensavers/maze.xml index a8468d58d..1ce360dd2 100644 --- a/capplets/screensaver/screensavers/maze.xml +++ b/capplets/screensaver/screensavers/maze.xml @@ -1,6 +1,6 @@ - + @@ -24,4 +24,5 @@ - + <_description>This is the ancient X maze demo, modified to work with xscreensaver. It generates a random maze, then solves it with visual feedback. Originally by Jim Randell; modified by a cast of thousands. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/moebius.xml b/capplets/screensaver/screensavers/moebius.xml index 8cd6eba8d..dffbe67ff 100644 --- a/capplets/screensaver/screensavers/moebius.xml +++ b/capplets/screensaver/screensavers/moebius.xml @@ -1,7 +1,8 @@ - + - + <_description>Another M. C. Escher hack by Marcelo Vianna, this one draws ``Moebius Strip II,'' a GL image of ants walking along the surface of a moebius strip. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/moire.xml b/capplets/screensaver/screensavers/moire.xml index aa1f19c9b..86c57b22e 100644 --- a/capplets/screensaver/screensavers/moire.xml +++ b/capplets/screensaver/screensavers/moire.xml @@ -1,6 +1,6 @@ - + @@ -19,4 +19,5 @@ - + <_description>This one draws cool circular interference patterns. Most of the circles you see aren't explicitly rendered, but show up as a result of interactions between the other pixels that were drawn. Written by Jamie Zawinski, inspired by Java code by Michael Bayne. As he pointed out, the beauty of this one is that the heart of the display algorithm can be expressed with just a pair of loops and a handful of arithmetic, giving it a high ``display hack metric''. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/moire2.xml b/capplets/screensaver/screensavers/moire2.xml index 205589c9d..bac75258a 100644 --- a/capplets/screensaver/screensavers/moire2.xml +++ b/capplets/screensaver/screensavers/moire2.xml @@ -1,7 +1,8 @@ - + - + <_description>Another example of the fun you can have with moire interference patterns; this hack generates fields of concentric circles or ovals, and combines the planes with various operations. The planes are moving independently of one another, causing the interference lines to ``spray.'' Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/molecule.xml b/capplets/screensaver/screensavers/molecule.xml new file mode 100644 index 000000000..f26b1afd9 --- /dev/null +++ b/capplets/screensaver/screensavers/molecule.xml @@ -0,0 +1,9 @@ + + + + + + <_description>Draws several different representations of molecules. Some common molecules are built in, and it can also read PDB (Protein Data Base) files as input. Written by Jamie Zawinski. + + + diff --git a/capplets/screensaver/screensavers/morph3d.xml b/capplets/screensaver/screensavers/morph3d.xml index 5c0f7983a..b3c68ebf1 100644 --- a/capplets/screensaver/screensavers/morph3d.xml +++ b/capplets/screensaver/screensavers/morph3d.xml @@ -1,7 +1,8 @@ - + - + <_description>Another 3d shape-changing GL hack, by Marcelo Vianna. It has the same shiny-plastic feel as Superquadrics, as many computer-generated objects do... + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/mountain.xml b/capplets/screensaver/screensavers/mountain.xml index a6e5f1369..4ea1df8d7 100644 --- a/capplets/screensaver/screensavers/mountain.xml +++ b/capplets/screensaver/screensavers/mountain.xml @@ -1,7 +1,8 @@ - + - + <_description>Generates random 3d plots that look vaguely mountainous. Written by Pascal Pensa. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/munch.xml b/capplets/screensaver/screensavers/munch.xml index 445f54ade..698dbf8b0 100644 --- a/capplets/screensaver/screensavers/munch.xml +++ b/capplets/screensaver/screensavers/munch.xml @@ -1,6 +1,6 @@ - + @@ -17,4 +17,12 @@ - + <_description> + DATAI 2 + ADDB 1,2 + ROTC 2,-22 + XOR 1,2 + JRST .-4 + +As reported by HAKMEM, in 1962, Jackson Wright wrote the above PDP-1 code. That code still lives on in this screenhack, some 35 years later. The number of lines of enclosing code has increased substantially, however. This version is by Tim Showalter. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/nerverot.xml b/capplets/screensaver/screensavers/nerverot.xml new file mode 100644 index 000000000..a3901646d --- /dev/null +++ b/capplets/screensaver/screensavers/nerverot.xml @@ -0,0 +1,9 @@ + + + + + + <_description>Draws different shapes composed of nervously vibrating squiggles, as if seen through a camera operated by a monkey on crack. By Dan Bornstein. + + + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/noseguy.xml b/capplets/screensaver/screensavers/noseguy.xml index 6d93c5d14..7d7d73034 100644 --- a/capplets/screensaver/screensavers/noseguy.xml +++ b/capplets/screensaver/screensavers/noseguy.xml @@ -1,7 +1,8 @@ - + - + <_description>A little man with a big nose wanders around your screen saying things. The things which he says can come from a file, or from an external program like `zippy' or `fortune'. This was extracted from `xnlock' by Dan Heller. Colorized by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/pedal.xml b/capplets/screensaver/screensavers/pedal.xml index f072180c4..c0cfe13c2 100644 --- a/capplets/screensaver/screensavers/pedal.xml +++ b/capplets/screensaver/screensavers/pedal.xml @@ -1,6 +1,6 @@ - + @@ -20,4 +20,5 @@ - + <_description>This is sort of a combination spirograph/string-art. It generates a large, complex polygon, and lets the X server do the bulk of the work by giving it an even/odd winding rule. Written by Dale Moore, based on some ancient PDP-11 code. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/penetrate.xml b/capplets/screensaver/screensavers/penetrate.xml index c35161cba..9bb6c38cc 100644 --- a/capplets/screensaver/screensavers/penetrate.xml +++ b/capplets/screensaver/screensavers/penetrate.xml @@ -1,7 +1,8 @@ - + - + <_description>This hack simulates the classic arcade game Missile Command. Written by Adam Miller. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/penrose.xml b/capplets/screensaver/screensavers/penrose.xml index d38a51253..4c0dee2e7 100644 --- a/capplets/screensaver/screensavers/penrose.xml +++ b/capplets/screensaver/screensavers/penrose.xml @@ -1,7 +1,12 @@ - + - + <_description>Draws quasiperiodic tilings; think of the implications on modern formica technology. Written by Timo Korvola. + +In April 1997, Sir Roger Penrose, a British math professor who has worked with Stephen Hawking on such topics as relativity, black holes, and whether time has a beginning, filed a copyright-infringement lawsuit against the Kimberly-Clark Corporation, which Penrose said copied a pattern he created (a pattern demonstrating that ``a nonrepeating pattern could exist in nature'') for its Kleenex quilted toilet paper. Penrose said he doesn't like litigation but, ``When it comes to the population of Great Britain being invited by a multinational to wipe their bottoms on what appears to be the work of a Knight of the Realm, then a last stand must be taken.'' + +As reported by News of the Weird #491, 4-jul-1997. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/petri.xml b/capplets/screensaver/screensavers/petri.xml new file mode 100644 index 000000000..c15a1eca2 --- /dev/null +++ b/capplets/screensaver/screensavers/petri.xml @@ -0,0 +1,9 @@ + + + + + + + <_description>This simulates colonies of mold growing in a petri dish. Growing colored circles overlap and leave spiral interference in their wake. Written by Dan Bornstein. + + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/phosphor.xml b/capplets/screensaver/screensavers/phosphor.xml new file mode 100644 index 000000000..cc309e717 --- /dev/null +++ b/capplets/screensaver/screensavers/phosphor.xml @@ -0,0 +1,8 @@ + + + + + + + <_description>Draws a simulation of an old terminal, with large pixels and long-sustain phosphor. It can run any program as a source of the text it displays. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/pipes.xml b/capplets/screensaver/screensavers/pipes.xml index 5c3e41a8b..c4ba16917 100644 --- a/capplets/screensaver/screensavers/pipes.xml +++ b/capplets/screensaver/screensavers/pipes.xml @@ -1,7 +1,8 @@ - + - + <_description>If you've ever been in the same room with a Windows NT machine, you've probably seen this GL hack. This version is by Marcelo Vianna. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/pulsar.xml b/capplets/screensaver/screensavers/pulsar.xml new file mode 100644 index 000000000..9184651aa --- /dev/null +++ b/capplets/screensaver/screensavers/pulsar.xml @@ -0,0 +1,9 @@ + + + + + + + <_description>Draws some intersecting planes, making use of alpha blending, fog, textures, and mipmaps, plus a ``frames per second'' meter so that you can tell how fast your graphics card is... Requires OpenGL. Written by David Konerding. + + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/pyro.xml b/capplets/screensaver/screensavers/pyro.xml index 91afe4de0..0b8490464 100644 --- a/capplets/screensaver/screensavers/pyro.xml +++ b/capplets/screensaver/screensavers/pyro.xml @@ -1,6 +1,6 @@ - + @@ -16,4 +16,5 @@ type="slider" default="20" arg="-scatter %" low="10" _high-label="More" high="100"/> - + <_description>Pyro draws exploding fireworks. Blah blah blah. Written by Jamie Zawinski. + \ No newline at end of file diff --git a/capplets/screensaver/screensavers/qix.xml b/capplets/screensaver/screensavers/qix.xml index 1856c7c37..b4b4c21a3 100644 --- a/capplets/screensaver/screensavers/qix.xml +++ b/capplets/screensaver/screensavers/qix.xml @@ -1,6 +1,6 @@ - +