The following information only applies if you are not using Xt[App]MainLoop() to process all events for an application.
There may be an architectural conflict if an application uses Xt[App]PeekEvent() and Xt[App]ProcessEvent() to process X events. If the application calls Xt[App]ProceesEvent() only when Xt[App]PeekEvent() returns true, a DtHelp index search will never complete.
A work procedure is registered when the user selects the Index
button in a General Help Dialog. In effect, the 'search' occurs
only when the application is not busy doing something else. If Xt[App]ProcessEvent() is called only when there is an X event, it (the
X event) takes precedence over any work procedure registered.
Therefore the Search work procedure is never called/completed.
The best way around this is to use Xt[App]MainLoop() to do your event processing.
If you cannot do this, then register your own work procedure
before creating any help dialogs. The work procedure can be very
simple (a return FALSE) or do the work you want to do if there is
no other X event or work procedure pending. Therefore, when a search
occurs, its work procedure will take precedence over your work procedure
and X events will take precedence over all.
The key is to always call Xt[App]ProcessEvent() so that the search work procedure will occur.
If no search is in progress, your work procedure will occur, causing
the Xt[App]ProcessEvent() to not block.