XmList
El widget de lista de Motif: filas de XmString con cuatro modelos de selección, desde una fila a la vez hasta el clic con Mayús y Ctrl, y siempre un doble clic que abre.
La lista recibe un array de XmString en XmNitems con XmNitemCount, o se va llenando con XmListAddItem y XmListAddItems. XmNvisibleItemCount fija cuántas filas se ven, y XmCreateScrolledList coloca el widget en un XmScrolledWindow con barra de desplazamiento. Lo que hace un clic lo gobierna XmNselectionPolicy: XmSINGLE_SELECT selecciona una fila y la deselecciona al siguiente clic, XmBROWSE_SELECT deja que la selección siga al ratón mientras se arrastra, XmMULTIPLE_SELECT conmuta cada fila por separado y XmEXTENDED_SELECT da el modelo que todos aprendieron de los gestores de archivos, Mayús para rangos y Ctrl para añadir de una en una. Cada modelo tiene su propio callback, y XmNdefaultActionCallback responde al doble clic.
El precio era XmString. Cada fila había que convertirla desde char* con XmStringCreateLocalized y liberarla después, y un programa que llenara la lista con diez mil filas sentía el coste de la conversión y aprendía que XmListAddItems era mucho más rápido que una llamada por fila. XmFileSelectionBox consiste en esencia en dos listas de estas, y así fue como la mayoría de los usuarios de Unix conoció el widget sin saber cómo se llamaba.