+ Time pointer_timeout; /* how often to check mouse position */
+ Time notice_events_timeout; /* how long after window creation to select */
+ Time watchdog_timeout; /* how often to re-raise and re-blank screen */
+
+ Bool use_xidle_extension; /* which extension to use, if possible */
+ Bool use_mit_saver_extension;
+ Bool use_sgi_saver_extension;
+
+ char *shell; /* where to find /bin/sh */
+
+};
+
+
+/* This structure holds all the data that applies to the program as a whole,
+ or to the non-screen-specific parts of the display connection.
+ */
+struct saver_info {
+ char *version;
+ saver_preferences prefs;
+
+ int nscreens;
+ saver_screen_info *screens;
+ saver_screen_info *default_screen; /* ...on which dialogs will appear. */
+
+ /* =======================================================================
+ global connection info
+ ======================================================================= */
+
+ XtAppContext app;
+ Display *dpy;
+ XrmDatabase db;
+
+ /* =======================================================================
+ server extension info
+ ======================================================================= */
+
+# ifdef HAVE_MIT_SAVER_EXTENSION
+ int mit_saver_ext_event_number;
+ int mit_saver_ext_error_number;
+# endif
+# ifdef HAVE_SGI_SAVER_EXTENSION
+ int sgi_saver_ext_event_number;
+ int sgi_saver_ext_error_number;
+# endif
+
+
+ /* =======================================================================
+ blanking
+ ======================================================================= */
+
+ Bool screen_blanked_p; /* Whether the saver is currently active. */
+ Window mouse_grab_window; /* Window holding our mouse grab */
+ Window keyboard_grab_window; /* Window holding our keyboard grab */
+
+
+ /* =======================================================================
+ locking
+ ======================================================================= */
+
+ Bool locking_disabled_p; /* Sometimes locking is impossible. */
+ char *nolock_reason; /* This is why. */
+ Bool locked_p; /* Whether the screen is currently locked. */
+ Bool dbox_up_p; /* Whether the demo-mode or passwd dialogs
+ are currently visible */
+
+ /* =======================================================================
+ demoing
+ ======================================================================= */
+
+ Bool demo_mode_p; /* Whether demo-mode is active */
+ char *demo_hack; /* The hack that has been selected from the
+ dialog box, which should be run next. */
+
+
+ /* =======================================================================
+ asking questions
+ ======================================================================= */
+
+ Bool question_up_p; /* Whether the question dialog is currently
+ visible. */
+ Widget question_dialog; /* The question dialog, if any. */
+
+
+ /* =======================================================================
+ timers
+ ======================================================================= */
+
+ XtIntervalId lock_id; /* Timer to implement `prefs.lock_timeout' */
+ XtIntervalId cycle_id; /* Timer to implement `prefs.cycle' */
+ XtIntervalId timer_id; /* Timer to implement `prefs.timeout' */
+ XtIntervalId watchdog_id; /* Timer to implement `prefs.watchdog */
+ XtIntervalId check_pointer_timer_id; /* `prefs.pointer_timeout' */
+
+ time_t last_activity_time; /* Used only when no server exts. */
+ saver_screen_info *last_activity_screen;
+
+
+ /* =======================================================================
+ remote control
+ ======================================================================= */
+
+ int next_mode_p; /* Set to 1 if the NEXT ClientMessage has just
+ been received; set to 2 if PREV has just
+ been received. (#### This is nasty.) */