X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fdemo-Gtk.c;h=a62d0b77b79c86729757353cf4b617329e94b867;hb=c1b9b55ad8d59dc05ef55e316aebf5863e7dfa56;hp=61e9aa284c41a5e74bc84df4e466e147c819009e;hpb=ccb7f4903325f92555a9722bba74b58346654ba0;p=xscreensaver diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c index 61e9aa28..a62d0b77 100644 --- a/driver/demo-Gtk.c +++ b/driver/demo-Gtk.c @@ -1,5 +1,5 @@ /* demo-Gtk.c --- implements the interactive demo-mode and options dialogs. - * xscreensaver, Copyright (c) 1993-2006 Jamie Zawinski + * xscreensaver, Copyright (c) 1993-2008 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -152,6 +152,13 @@ static void hack_subproc_environment (Window preview_window_id, Bool debug_p); #define countof(x) (sizeof((x))/sizeof((*x))) +/* You might think that to read an array of 32-bit quantities out of a + server-side property, you would pass an array of 32-bit data quantities + into XGetWindowProperty(). You would be wrong. You have to use an array + of longs, even if long is 64 bits (using 32 of each 64.) + */ +typedef long PROP32; + char *progname = 0; char *progclass = "XScreenSaver"; XrmDatabase db; @@ -233,11 +240,48 @@ static void schedule_preview (state *, const char *cmd); static void kill_preview_subproc (state *, Bool reset_p); static void schedule_preview_check (state *); + +/* Prototypes of functions used by the Glade-generated code, + to avoid warnings. + */ +void exit_menu_cb (GtkMenuItem *, gpointer user_data); +void about_menu_cb (GtkMenuItem *, gpointer user_data); +void doc_menu_cb (GtkMenuItem *, gpointer user_data); +void file_menu_cb (GtkMenuItem *, gpointer user_data); +void activate_menu_cb (GtkMenuItem *, gpointer user_data); +void lock_menu_cb (GtkMenuItem *, gpointer user_data); +void kill_menu_cb (GtkMenuItem *, gpointer user_data); +void restart_menu_cb (GtkWidget *, gpointer user_data); +void run_this_cb (GtkButton *, gpointer user_data); +void manual_cb (GtkButton *, gpointer user_data); +void run_next_cb (GtkButton *, gpointer user_data); +void run_prev_cb (GtkButton *, gpointer user_data); +void pref_changed_cb (GtkWidget *, gpointer user_data); +gboolean pref_changed_event_cb (GtkWidget *, GdkEvent *, gpointer user_data); +void mode_menu_item_cb (GtkWidget *, gpointer user_data); +void switch_page_cb (GtkNotebook *, GtkNotebookPage *, + gint page_num, gpointer user_data); +void browse_image_dir_cb (GtkButton *, gpointer user_data); +void browse_text_file_cb (GtkButton *, gpointer user_data); +void browse_text_program_cb (GtkButton *, gpointer user_data); +void settings_cb (GtkButton *, gpointer user_data); +void settings_adv_cb (GtkButton *, gpointer user_data); +void settings_std_cb (GtkButton *, gpointer user_data); +void settings_reset_cb (GtkButton *, gpointer user_data); +void settings_switch_page_cb (GtkNotebook *, GtkNotebookPage *, + gint page_num, gpointer user_data); +void settings_cancel_cb (GtkButton *, gpointer user_data); +void settings_ok_cb (GtkButton *, gpointer user_data); + +static void kill_gnome_screensaver (void); +static void kill_kde_screensaver (void); /* Some random utility functions */ +const char *blurb (void); + const char * blurb (void) { @@ -442,9 +486,23 @@ static void warning_dialog_restart_cb (GtkWidget *widget, gpointer user_data) warning_dialog_dismiss_cb (widget, user_data); } +static void warning_dialog_killg_cb (GtkWidget *widget, gpointer user_data) +{ + kill_gnome_screensaver (); + warning_dialog_dismiss_cb (widget, user_data); +} + +static void warning_dialog_killk_cb (GtkWidget *widget, gpointer user_data) +{ + kill_kde_screensaver (); + warning_dialog_dismiss_cb (widget, user_data); +} + +typedef enum { D_NONE, D_LAUNCH, D_GNOME, D_KDE } dialog_button; + static void warning_dialog (GtkWidget *parent, const char *message, - Boolean restart_button_p, int center) + dialog_button button_type, int center) { char *msg = strdup (message); char *head; @@ -517,7 +575,7 @@ warning_dialog (GtkWidget *parent, const char *message, label, TRUE, TRUE, 0); #ifdef HAVE_GTK2 - if (restart_button_p) + if (button_type != D_NONE) { cancel = gtk_button_new_from_stock (GTK_STOCK_CANCEL); gtk_container_add (GTK_CONTAINER (label), cancel); @@ -531,7 +589,7 @@ warning_dialog (GtkWidget *parent, const char *message, ok = gtk_button_new_with_label ("OK"); gtk_container_add (GTK_CONTAINER (label), ok); - if (restart_button_p) + if (button_type != D_NONE) { cancel = gtk_button_new_with_label ("Cancel"); gtk_container_add (GTK_CONTAINER (label), cancel); @@ -542,22 +600,28 @@ warning_dialog (GtkWidget *parent, const char *message, gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); gtk_window_set_title (GTK_WINDOW (dialog), progclass); - STFU GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT); + GTK_WIDGET_SET_FLAGS (ok, GTK_CAN_DEFAULT); gtk_widget_show (ok); gtk_widget_grab_focus (ok); if (cancel) { - STFU GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); + GTK_WIDGET_SET_FLAGS (cancel, GTK_CAN_DEFAULT); gtk_widget_show (cancel); } gtk_widget_show (label); gtk_widget_show (dialog); - if (restart_button_p) + if (button_type != D_NONE) { - gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", - GTK_SIGNAL_FUNC (warning_dialog_restart_cb), + GtkSignalFunc fn; + switch (button_type) { + case D_LAUNCH: fn = GTK_SIGNAL_FUNC (warning_dialog_restart_cb); break; + case D_GNOME: fn = GTK_SIGNAL_FUNC (warning_dialog_killg_cb); break; + case D_KDE: fn = GTK_SIGNAL_FUNC (warning_dialog_killk_cb); break; + default: abort(); break; + } + gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", fn, (gpointer) dialog); gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked", GTK_SIGNAL_FUNC (warning_dialog_dismiss_cb), @@ -604,7 +668,7 @@ run_cmd (state *s, Atom command, int arg) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); - warning_dialog (s->toplevel_widget, buf, False, 100); + warning_dialog (s->toplevel_widget, buf, D_NONE, 100); } if (err) free (err); @@ -645,7 +709,7 @@ run_hack (state *s, int list_elt, Bool report_errors_p) sprintf (buf, "Error:\n\n%s", err); else strcpy (buf, "Unknown error!"); - warning_dialog (s->toplevel_widget, buf, False, 100); + warning_dialog (s->toplevel_widget, buf, D_NONE, 100); } } else @@ -660,7 +724,7 @@ run_hack (state *s, int list_elt, Bool report_errors_p) "The XScreenSaver daemon doesn't seem to be running\n" "on display \"%s\". Launch it now?"), d); - warning_dialog (s->toplevel_widget, msg, True, 1); + warning_dialog (s->toplevel_widget, msg, D_LAUNCH, 1); } } @@ -716,9 +780,9 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data) look as good in the plain-old default Latin1 "C" locale.) */ #ifdef HAVE_GTK2 - sprintf(copy, ("Copyright \xC2\xA9 1991-2005 %s"), s); + sprintf(copy, ("Copyright \xC2\xA9 1991-2008 %s"), s); #else /* !HAVE_GTK2 */ - sprintf(copy, ("Copyright \251 1991-2005 %s"), s); + sprintf(copy, ("Copyright \251 1991-2008 %s"), s); #endif /* !HAVE_GTK2 */ sprintf (msg, "%s\n\n%s", copy, desc); @@ -835,7 +899,7 @@ doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data) { warning_dialog (s->toplevel_widget, _("Error:\n\n" - "No Help URL has been specified.\n"), False, 100); + "No Help URL has been specified.\n"), D_NONE, 100); return; } @@ -942,7 +1006,7 @@ await_xscreensaver (state *s) the length ISO C89 compilers are required to support" in the following expression... */ # endif - strcat (buf, + strcat (buf, STFU _("You are running as root. This usually means that xscreensaver\n" "was unable to contact your X server because access control is\n" "turned on. Try running this command:\n" @@ -961,7 +1025,7 @@ await_xscreensaver (state *s) else strcat (buf, _("Please check your $PATH and permissions.")); - warning_dialog (s->toplevel_widget, buf, False, 1); + warning_dialog (s->toplevel_widget, buf, D_NONE, 1); } force_dialog_repaint (s); @@ -978,6 +1042,7 @@ selected_list_element (state *s) static int demo_write_init_file (state *s, saver_preferences *p) { + Display *dpy = GDK_DISPLAY(); #if 0 /* #### try to figure out why shit keeps getting reordered... */ @@ -985,7 +1050,7 @@ demo_write_init_file (state *s, saver_preferences *p) abort(); #endif - if (!write_init_file (p, s->short_version, False)) + if (!write_init_file (dpy, p, s->short_version, False)) { if (s->debug_p) fprintf (stderr, "%s: wrote %s\n", blurb(), init_file_name()); @@ -997,12 +1062,12 @@ demo_write_init_file (state *s, saver_preferences *p) if (!f || !*f) warning_dialog (s->toplevel_widget, _("Error:\n\nCouldn't determine init file name!\n"), - False, 100); + D_NONE, 100); else { char *b = (char *) malloc (strlen(f) + 1024); sprintf (b, _("Error:\n\nCouldn't write %s\n"), f); - warning_dialog (s->toplevel_widget, b, False, 100); + warning_dialog (s->toplevel_widget, b, D_NONE, 100); free (b); } return -1; @@ -1024,6 +1089,7 @@ run_this_cb (GtkButton *button, gpointer user_data) G_MODULE_EXPORT void manual_cb (GtkButton *button, gpointer user_data) { + Display *dpy = GDK_DISPLAY(); state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; GtkWidget *list_widget = name_to_widget (s, "list"); @@ -1045,9 +1111,9 @@ manual_cb (GtkButton *button, gpointer user_data) while (*str && !isspace (*str)) str++; *str = 0; str = strrchr (name2, '/'); - if (str) name = str+1; + if (str) name2 = str+1; - cmd = get_string_resource ("manualCommand", "ManualCommand"); + cmd = get_string_resource (dpy, "manualCommand", "ManualCommand"); if (cmd) { char *cmd2 = (char *) malloc (strlen (cmd) + (strlen (name2) * 4) + 100); @@ -1064,7 +1130,7 @@ manual_cb (GtkButton *button, gpointer user_data) { warning_dialog (GTK_WIDGET (button), _("Error:\n\nno `manualCommand' resource set."), - False, 100); + D_NONE, 100); } free (oname); @@ -1085,7 +1151,7 @@ force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p) if (!was) gtk_widget_set_sensitive (parent, True); #ifdef HAVE_GTK2 model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); - STFU g_assert (model); + g_assert (model); if (gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt)) { selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); @@ -1249,7 +1315,7 @@ hack_time_text (state *s, const char *line, Time *store, Bool sec_p) _("Error:\n\n" "Unparsable time format: \"%s\"\n"), line); - warning_dialog (s->toplevel_widget, b, False, 100); + warning_dialog (s->toplevel_widget, b, D_NONE, 100); } else *store = value; @@ -1495,7 +1561,7 @@ flush_dialog_changes_and_save (state *s) char b[255]; sprintf (b, "Error:\n\n" "Directory does not exist: \"%s\"\n", p2->image_directory); - warning_dialog (s->toplevel_widget, b, False, 100); + warning_dialog (s->toplevel_widget, b, D_NONE, 100); } @@ -1697,7 +1763,7 @@ pref_changed_event_cb (GtkWidget *widget, GdkEvent *event, gpointer user_data) /* Callback on menu items in the "mode" options menu. */ -void +G_MODULE_EXPORT void mode_menu_item_cb (GtkWidget *widget, gpointer user_data) { state *s = (state *) user_data; @@ -1766,7 +1832,7 @@ list_activated_cb (GtkTreeView *list, char *str; int list_elt; - STFU g_return_if_fail (!gdk_pointer_is_grabbed ()); + g_return_if_fail (!gdk_pointer_is_grabbed ()); str = gtk_tree_path_to_string (path); list_elt = strtol (str, NULL, 10); @@ -1954,7 +2020,7 @@ store_image_directory (GtkWidget *button, gpointer user_data) { char b[255]; sprintf (b, _("Error:\n\n" "Directory does not exist: \"%s\"\n"), path); - warning_dialog (GTK_WIDGET (top), b, False, 100); + warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } @@ -1984,7 +2050,7 @@ store_text_file (GtkWidget *button, gpointer user_data) { char b[255]; sprintf (b, _("Error:\n\n" "File does not exist: \"%s\"\n"), path); - warning_dialog (GTK_WIDGET (top), b, False, 100); + warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } @@ -2015,7 +2081,7 @@ store_text_program (GtkWidget *button, gpointer user_data) { char b[255]; sprintf (b, _("Error:\n\n" "File does not exist: \"%s\"\n"), path); - warning_dialog (GTK_WIDGET (top), b, False, 100); + warning_dialog (GTK_WIDGET (top), b, D_NONE, 100); return; } # endif @@ -2172,7 +2238,7 @@ browse_text_program_cb (GtkButton *button, gpointer user_data) -G_MODULE_EXPORT void +G_MODULE_EXPORT void settings_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ @@ -2188,7 +2254,7 @@ settings_sync_cmd_text (state *s) { # ifdef HAVE_XML GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); - char *cmd_line = get_configurator_command_line (s->cdata); + char *cmd_line = get_configurator_command_line (s->cdata, False); gtk_entry_set_text (GTK_ENTRY (cmd), cmd_line); gtk_entry_set_position (GTK_ENTRY (cmd), strlen (cmd_line)); free (cmd_line); @@ -2219,6 +2285,20 @@ settings_std_cb (GtkButton *button, gpointer user_data) gtk_notebook_set_page (notebook, 0); } +G_MODULE_EXPORT void +settings_reset_cb (GtkButton *button, gpointer user_data) +{ +# ifdef HAVE_XML + state *s = global_state_kludge; /* I hate C so much... */ + GtkWidget *cmd = GTK_WIDGET (name_to_widget (s, "cmd_text")); + char *cmd_line = get_configurator_command_line (s->cdata, True); + gtk_entry_set_text (GTK_ENTRY (cmd), cmd_line); + gtk_entry_set_position (GTK_ENTRY (cmd), strlen (cmd_line)); + free (cmd_line); + populate_popup_window (s); +# endif /* HAVE_XML */ +} + G_MODULE_EXPORT void settings_switch_page_cb (GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, gpointer user_data) @@ -2303,7 +2383,7 @@ server_current_hack (void) && nitems >= 3 && dataP) { - CARD32 *data = (CARD32 *) dataP; + PROP32 *data = (PROP32 *) dataP; hack_number = (int) data[2] - 1; } @@ -2360,6 +2440,7 @@ scroll_to_current_hack (state *s) static void populate_hack_list (state *s) { + Display *dpy = GDK_DISPLAY(); #ifdef HAVE_GTK2 saver_preferences *p = &s->prefs; GtkTreeView *list = GTK_TREE_VIEW (name_to_widget (s, "list")); @@ -2420,7 +2501,7 @@ populate_hack_list (state *s) pretty_name = (hack->name ? strdup (hack->name) - : make_hack_name (hack->command)); + : make_hack_name (dpy, hack->command)); if (!available_p) { @@ -3152,11 +3233,12 @@ eschew_gtk_lossage (GtkLabel *label) static void populate_demo_window (state *s, int list_elt) { + Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; screenhack *hack; char *pretty_name; GtkFrame *frame1 = GTK_FRAME (name_to_widget (s, "preview_frame")); - GtkFrame *frame2 = GTK_FRAME (name_to_widget (s, "doc_frame")); + GtkFrame *frame2 = GTK_FRAME (name_to_widget (s, "opt_frame")); GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text")); GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo")); GtkWidget *list = GTK_WIDGET (name_to_widget (s, "list")); @@ -3183,7 +3265,7 @@ populate_demo_window (state *s, int list_elt) pretty_name = (hack ? (hack->name ? strdup (hack->name) - : make_hack_name (hack->command)) + : make_hack_name (dpy, hack->command)) : 0); if (hack) @@ -3264,6 +3346,7 @@ sort_hack_cmp (const void *a, const void *b) static void initialize_sort_map (state *s) { + Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; int i, j; @@ -3314,7 +3397,7 @@ initialize_sort_map (state *s) screenhack *hack = p->screenhacks[i]; char *name = (hack->name && *hack->name ? strdup (hack->name) - : make_hack_name (hack->command)); + : make_hack_name (dpy, hack->command)); char *str; for (str = name; *str; str++) *str = tolower(*str); @@ -3348,6 +3431,7 @@ initialize_sort_map (state *s) static int maybe_reload_init_file (state *s) { + Display *dpy = GDK_DISPLAY(); saver_preferences *p = &s->prefs; int status = 0; @@ -3368,10 +3452,10 @@ maybe_reload_init_file (state *s) _("Warning:\n\n" "file \"%s\" has changed, reloading.\n"), f); - warning_dialog (s->toplevel_widget, b, False, 100); + warning_dialog (s->toplevel_widget, b, D_NONE, 100); free (b); - load_init_file (p); + load_init_file (dpy, p); initialize_sort_map (s); list_elt = selected_list_element (s); @@ -3755,9 +3839,13 @@ kill_preview_subproc (state *s, Bool reset_p) perror (buf); } } - else if (s->debug_p) - fprintf (stderr, "%s: killed pid %lu (%s)\n", blurb(), - (unsigned long) s->running_preview_pid, ss); + else { + int endstatus; + waitpid(s->running_preview_pid, &endstatus, 0); + if (s->debug_p) + fprintf (stderr, "%s: killed pid %lu (%s)\n", blurb(), + (unsigned long) s->running_preview_pid, ss); + } free (ss); s->running_preview_pid = 0; @@ -3974,6 +4062,13 @@ update_subproc_timer (gpointer data) return FALSE; /* do not re-execute timer */ } +static int +settings_timer (gpointer data) +{ + settings_cb (0, 0); + return FALSE; +} + /* Call this when you think you might want a preview process running. It will set a timer that will actually launch that program a second @@ -4197,6 +4292,77 @@ mapper (XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, #endif +static Window +gnome_screensaver_window (Screen *screen) +{ + Display *dpy = DisplayOfScreen (screen); + Window root = RootWindowOfScreen (screen); + Window parent, *kids; + unsigned int nkids; + Window gnome_window = 0; + int i; + + if (! XQueryTree (dpy, root, &root, &parent, &kids, &nkids)) + abort (); + for (i = 0; i < nkids; i++) + { + Atom type; + int format; + unsigned long nitems, bytesafter; + unsigned char *name; + if (XGetWindowProperty (dpy, kids[i], XA_WM_COMMAND, 0, 128, + False, XA_STRING, &type, &format, &nitems, + &bytesafter, &name) + == Success + && type != None + && !strcmp ((char *) name, "gnome-screensaver")) + { + gnome_window = kids[i]; + break; + } + } + + if (kids) XFree ((char *) kids); + return gnome_window; +} + +static Bool +gnome_screensaver_active_p (void) +{ + Display *dpy = GDK_DISPLAY(); + Window w = gnome_screensaver_window (DefaultScreenOfDisplay (dpy)); + return (w ? True : False); +} + +static void +kill_gnome_screensaver (void) +{ + Display *dpy = GDK_DISPLAY(); + Window w = gnome_screensaver_window (DefaultScreenOfDisplay (dpy)); + if (w) XKillClient (dpy, (XID) w); +} + +static Bool +kde_screensaver_active_p (void) +{ + FILE *p = popen ("dcop kdesktop KScreensaverIface isEnabled 2>/dev/null", + "r"); + char buf[255]; + fgets (buf, sizeof(buf)-1, p); + pclose (p); + if (!strcmp (buf, "true\n")) + return True; + else + return False; +} + +static void +kill_kde_screensaver (void) +{ + system ("dcop kdesktop KScreensaverIface enable false"); +} + + static void the_network_is_not_the_computer (state *s) { @@ -4310,12 +4476,36 @@ the_network_is_not_the_computer (state *s) if (*msg) - warning_dialog (s->toplevel_widget, msg, True, 1); + warning_dialog (s->toplevel_widget, msg, D_LAUNCH, 1); if (rversion) free (rversion); if (ruser) free (ruser); if (rhost) free (rhost); free (msg); + msg = 0; + + /* Note: since these dialogs are not modal, they will stack up. + So we do this check *after* popping up the "xscreensaver is not + running" dialog so that these are on top. Good enough. + */ + + if (gnome_screensaver_active_p ()) + warning_dialog (s->toplevel_widget, + _("Warning:\n\n" + "The GNOME screensaver daemon appears to be running.\n" + "It must be stopped for XScreenSaver to work properly.\n" + "\n" + "Stop the GNOME screen saver daemon now?\n"), + D_GNOME, 1); + + if (kde_screensaver_active_p ()) + warning_dialog (s->toplevel_widget, + _("Warning:\n\n" + "The KDE screen saver daemon appears to be running.\n" + "It must be stopped for XScreenSaver to work properly.\n" + "\n" + "Stop the KDE screen saver daemon now?\n"), + D_KDE, 1); } @@ -4371,6 +4561,7 @@ g_log_handler (const gchar *log_domain, GLogLevelFlags log_level, the .ad file... */ #endif +STFU static char *defaults[] = { #include "XScreenSaver_ad.h" 0 @@ -4384,7 +4575,7 @@ static struct poptOption crapplet_options[] = { #endif /* HAVE_CRAPPLET */ #endif /* 0 */ -const char *usage = "[--display dpy] [--prefs]" +const char *usage = "[--display dpy] [--prefs | --settings]" # ifdef HAVE_CRAPPLET " [--crapplet]" # endif @@ -4485,7 +4676,8 @@ main (int argc, char **argv) XtAppContext app; state S, *s; saver_preferences *p; - Bool prefs = False; + Bool prefs_p = False; + Bool settings_p = False; int i; Display *dpy; Widget toplevel_shell; @@ -4751,7 +4943,9 @@ main (int argc, char **argv) if (str[0] == '-' && str[1] == '-') str++; if (!strcmp (str, "-prefs")) - prefs = True; + prefs_p = True; + else if (!strcmp (str, "-settings")) + settings_p = True; else if (crapplet_p) /* There are lots of random args that we don't care about when we're started as a crapplet, so just ignore unknown args in that case. */ @@ -4775,7 +4969,7 @@ main (int argc, char **argv) hack_environment (s); /* must be before initialize_sort_map() */ - load_init_file (p); + load_init_file (dpy, p); initialize_sort_map (s); /* Now that Xt has been initialized, and the resources have been read, @@ -4857,6 +5051,8 @@ main (int argc, char **argv) gtk_widget_set_sensitive (std, False); std = GTK_WIDGET (name_to_widget (s, "adv_button")); gtk_widget_hide (std); + std = GTK_WIDGET (name_to_widget (s, "reset_button")); + gtk_widget_hide (std); page = 1; # endif /* !HAVE_XML */ @@ -4921,7 +5117,7 @@ main (int argc, char **argv) /* Handle the -prefs command-line argument. */ - if (prefs) + if (prefs_p) { GtkNotebook *notebook = GTK_NOTEBOOK (name_to_widget (s, "notebook")); @@ -5011,8 +5207,14 @@ main (int argc, char **argv) gtk_timeout_add (60 * 1000, check_blanked_timer, s); + /* Handle the --settings command-line argument. */ + if (settings_p) + gtk_timeout_add (500, settings_timer, 0); + + /* Issue any warnings about the running xscreensaver daemon. */ - the_network_is_not_the_computer (s); + if (! s->debug_p) + the_network_is_not_the_computer (s); /* Run the Gtk event loop, and not the Xt event loop. This means that @@ -5030,17 +5232,18 @@ main (int argc, char **argv) gtk_timeout_add (500, delayed_scroll_kludge, s); -#if 0 +#if 1 /* Load every configurator in turn, to scan them for errors all at once. */ - { - int i; - for (i = 0; i < p->screenhacks_count; i++) - { - screenhack *hack = p->screenhacks[i]; - conf_data *d = load_configurator (hack->command, False); - if (d) free_conf_data (d); - } - } + if (s->debug_p) + { + int i; + for (i = 0; i < p->screenhacks_count; i++) + { + screenhack *hack = p->screenhacks[i]; + conf_data *d = load_configurator (hack->command, s->debug_p); + if (d) free_conf_data (d); + } + } #endif