ratio_t = ((double) child_y) / ((double) children_h);
ratio_b = ((double) child_y + child_h) / ((double) children_h);
+ if (adj->upper == 0.0) /* no items in list */
+ return;
+
if (ratio_t < (adj->value / adj->upper) ||
ratio_b > ((adj->value + adj->page_size) / adj->upper))
{
this parses the text, and does error checking.
*/
static void
-hack_time_text (const char *line, Time *store, Bool sec_p)
+hack_time_text (GtkWidget *widget, const char *line, Time *store, Bool sec_p)
{
if (*line)
{
value = parse_time ((char *) line, sec_p, True);
value *= 1000; /* Time measures in microseconds */
if (value < 0)
- /* gdk_beep () */;
+ {
+ char b[255];
+ sprintf (b,
+ "Error:\n\n"
+ "Unparsable time format: \"%s\"\n",
+ line);
+ warning_dialog (widget, b, 100);
+ }
else
*store = value;
}
Bool changed = False;
# define SECONDS(field, name) \
- hack_time_text (gtk_entry_get_text (\
+ hack_time_text (GTK_WIDGET(button), gtk_entry_get_text (\
GTK_ENTRY (name_to_widget (GTK_WIDGET(button), (name)))), \
(field), \
True)
# define MINUTES(field, name) \
- hack_time_text (gtk_entry_get_text (\
+ hack_time_text (GTK_WIDGET(button), gtk_entry_get_text (\
GTK_ENTRY (name_to_widget (GTK_WIDGET(button), (name)))), \
(field), \
False)
if (! *line) \
; \
else if (sscanf (line, "%u%c", &value, &c) != 1) \
- gdk_beep(); \
+ { \
+ char b[255]; \
+ sprintf (b, "Error:\n\n" "Not an integer: \"%s\"\n", line); \
+ warning_dialog (GTK_WIDGET (button), b, 100); \
+ } \
else \
*(field) = value; \
} while(0)
static void
scroll_to_current_hack (GtkWidget *toplevel, prefs_pair *pair)
{
+ saver_preferences *p = pair->a;
Atom type;
int format;
unsigned long nitems, bytesafter;
list = GTK_LIST (name_to_widget (toplevel, "list"));
apply_changes_and_save (toplevel);
- gtk_list_select_item (list, which);
- ensure_selected_item_visible (GTK_WIDGET (list));
- populate_demo_window (toplevel, which, pair);
+ if (which < p->screenhacks_count)
+ {
+ gtk_list_select_item (list, which);
+ ensure_selected_item_visible (GTK_WIDGET (list));
+ populate_demo_window (toplevel, which, pair);
+ }
}
screenhack **hacks = p->screenhacks;
screenhack **h;
- for (h = hacks; *h; h++)
+ for (h = hacks; h && *h; h++)
{
GtkWidget *line;
char *pretty_name = (h[0]->name
populate_demo_window (GtkWidget *toplevel, int which, prefs_pair *pair)
{
saver_preferences *p = pair->a;
- screenhack *hack = (which >= 0 ? p->screenhacks[which] : 0);
+ screenhack *hack = (which >= 0 && which < p->screenhacks_count
+ ? p->screenhacks[which] : 0);
GtkFrame *frame = GTK_FRAME (name_to_widget (toplevel, "frame"));
GtkLabel *doc = GTK_LABEL (name_to_widget (toplevel, "doc"));
GtkEntry *cmd = GTK_ENTRY (name_to_widget (toplevel, "cmd_text"));
prefs = True;
else
{
+ fprintf (stderr, "%s: unknown option: %s\n", real_progname, argv[i]);
fprintf (stderr, "usage: %s [ -display dpy-string ] [ -prefs ]\n",
real_progname);
exit (1);