XmDrawingArea
Le widget vierge de Motif : une surface sans aspect propre qui se contente de signaler qu'elle doit être redessinée, a été redimensionnée ou a reçu un clic, en laissant tout le dessin au programme.
Motif livrait boutons, listes et champs de texte à l'aspect fini, mais aucun moyen d'afficher une courbe, une carte ou un schéma sur mesure. XmDrawingArea est la réponse : un widget gestionnaire qui ne dessine rien lui-même et propose trois callbacks à la place. XmNexposeCallback se déclenche quand le serveur X envoie un événement Expose, XmNresizeCallback quand la taille change et XmNinputCallback sur les touches et boutons de souris. Dans le callback, le programme récupère la fenêtre du widget avec XtWindow, crée un contexte graphique et dessine avec Xlib exactement comme un programme sans toolkit. Étant aussi un gestionnaire, il accepte des enfants à des coordonnées arbitraires, ce qui en faisait ce que Motif avait de plus proche d'un canevas garni de boutons.
Les pièges sont du X classique. Une fenêtre découverte en plusieurs rectangles produit plusieurs événements Expose, de sorte que tout redessiner à chaque appel revient à redessiner plusieurs fois pour rien, et le callback de redimensionnement peut arriver avant que la fenêtre soit mappée, quand il n'y a encore rien où dessiner. Le GLwMDrawingArea de SGI était le même widget avec un contexte OpenGL derrière, et c'est ainsi que la plupart de la CAO Unix des années 1990 a logé sa vue 3D dans une fenêtre Motif.