[comp.windows.x.motif] list widget fix

cws@gigo.uucp (Carl Schmidtmann) (05/01/91)

The following code will do the function of the XmListDeleteAllItems.  It
has been used with both Motif 1.0 and 1.1.  Basically it gets the items
from the widget, frees them, sets the itemlist inside the widget to NULL and
the itemcount to 0.  The code has not broken any apps and even very large
lists disappear fast.  So far no memory leaks have been noticed.

One note of caution: Be sure that all items are deselected before calling
the clear_list routine.

This code was written by Douglas Young and came into my possession via 
Golden Hills Computer Training.

Carl 
________________________________________________________________________________
Carl Schmidtmann                     | Still searching for the ultimate
gigo!cws@decwrl.dec.com              | Pan Galactic Gargle Blaster.
...!decwrl!gigo!cws                  | Don't Panic . . .
...!claris!wattres!gigo!cws          | . . . this reality is only a test.


=============================================================================

#include	<Xm/Xm.h>
#include	<Xm/List.h>

void
clear_list( list )
    Widget	list;
{
    Arg			wargs[5];
    int			n, i, itemCount;
    XmStringTable	items;

    XmListDeselectAllItems( list );

    n = 0;
    XtSetArg( wargs[n], XmNitemCount, &itemCount ); n++;
    XtSetArg( wargs[n], XmNitems, &items ); n++;
    XtGetValues( list, wargs, n );

    free_stringTable( items, itemCount );

    n = 0;
    XtSetArg( wargs[n], XmNitemCount, 0 ); n++;
    XtSetArg( wargs[n], XmNitems, NULL ); n++;
    XtSetValues( list, wargs, n );

}

void
free_stringTable( itemList, itemCount )
    XmStringTable	itemList;
    int			itemCount;
{
    int		i;

    if( itemList != NULL )
    {
	for( i = 0; i < itemCount;  i++ )
	    XmStringFree( itemList[i] );
	XtFree( itemList );
    }
}

-- 
________________________________________________________________________________
Carl Schmidtmann                     | Still searching for the ultimate
gigo!cws@decwrl.dec.com              | Pan Galactic Gargle Blaster.
...!decwrl!gigo!cws                  | Don't Panic . . .