X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=driver%2Fdemo.c;h=b13622e175828704f30fa7fbf60edce7b5de3aa5;hb=5b7bc6e70fb439cf4c4bf771ae9f94077fe4fe08;hp=a0ae2dab66c1b2d0b09f4c833d4f75822724cb15;hpb=186b0b9f1638444c650c9273df38085e0db71e4a;p=xscreensaver diff --git a/driver/demo.c b/driver/demo.c index a0ae2dab..b13622e1 100644 --- a/driver/demo.c +++ b/driver/demo.c @@ -16,6 +16,11 @@ #include +#ifdef DEBUG +# include /* just to get debug info for gdb... */ +# include +#endif + #ifdef HAVE_MOTIF # include # include @@ -363,18 +368,19 @@ next_cb (Widget button, XtPointer client_data, XtPointer call_data) int *pos_list; int pos_count; if (! XmListGetSelectedPos (demo_list, &pos_list, &pos_count)) - XmListSelectPos (demo_list, 1, True); + { + XmListDeselectAllItems(demo_list); /* LessTif lossage */ + XmListSelectPos (demo_list, 1, True); + } else { - int pos = pos_list [0]; - XmListSelectPos (demo_list, pos + 1, True); - XtFree ((char *) pos_list); - if (! XmListGetSelectedPos (demo_list, &pos_list, &pos_count)) - abort (); - if (pos_list [0] == pos) - XmListSelectPos (demo_list, 1, True); - XtFree ((char *) pos_list); + int pos = pos_list[0] + 1; + if (pos > si->prefs.screenhacks_count) + pos = 1; + XmListDeselectAllItems(demo_list); /* LessTif lossage */ + XmListSelectPos (demo_list, pos, True); } + XtFree ((char *) pos_list); ensure_selected_item_visible (demo_list); demo_mode_hack (si, get_text_string (text_line)); @@ -409,9 +415,13 @@ prev_cb (Widget button, XtPointer client_data, XtPointer call_data) int *pos_list; int pos_count; if (! XmListGetSelectedPos (demo_list, &pos_list, &pos_count)) - XmListSelectPos (demo_list, 0, True); + { + XmListDeselectAllItems(demo_list); /* LessTif lossage */ + XmListSelectPos (demo_list, 0, True); + } else { + XmListDeselectAllItems(demo_list); /* LessTif lossage */ XmListSelectPos (demo_list, pos_list [0] - 1, True); XtFree ((char *) pos_list); } @@ -451,6 +461,7 @@ restart_cb (Widget button, XtPointer client_data, XtPointer call_data) demo_mode_restart_process (si); } + void pop_up_dialog_box (Widget dialog, Widget form, int where) { @@ -575,6 +586,32 @@ make_screenhack_dialog (saver_info *si) XmStringFree (xmstr); } + /* Cause the most-recently-run hack to be selected in the list. + Do some voodoo to make it be roughly centered in the list (really, + just make it not be within +/- 5 of the top/bottom if possible.) + */ + if (ssi->current_hack > 0) + { + int i = ssi->current_hack+1; + int top = i + 5; + int bot = i - 5; + if (bot < 1) bot = 1; + if (top > si->prefs.screenhacks_count) + top = si->prefs.screenhacks_count; + + XmListDeselectAllItems(demo_list); /* LessTif lossage */ + XmListSelectPos (demo_list, bot, False); + ensure_selected_item_visible (demo_list); + + XmListDeselectAllItems(demo_list); /* LessTif lossage */ + XmListSelectPos (demo_list, top, False); + ensure_selected_item_visible (demo_list); + + XmListDeselectAllItems(demo_list); /* LessTif lossage */ + XmListSelectPos (demo_list, i, False); + ensure_selected_item_visible (demo_list); + } + #else /* HAVE_ATHENA */ XtVaSetValues (demo_list, @@ -583,6 +620,10 @@ make_screenhack_dialog (saver_info *si) 0); XtAddCallback (demo_list, XtNcallback, select_cb, si); + /* #### still need to do the "select most-recently-run hack" + #### thing for Athena. + */ + #endif /* HAVE_ATHENA */ pop_up_dialog_box(demo_dialog, demo_form,