TRAITS(5)

πŸ“¦
version 2.5.2 Β· 2 versions
, in alpine 3.24, arch rolling, centos-stream 9, epel 10, fedora 43, fedora 44, nixos 26.05, nixpkgs unstable, opensuse-leap 16.0

πŸ’– TRAITS πŸ’– β€” the Traits(file formats) manual page, bestie edition


✨ NAME ✨

Traits β€” the full receipts on the traits used by the Motif Toolkit. πŸ‘‘


πŸ¦‹ DESCRIPTION πŸ¦‹

okay so first things first: what even is a trait? 🫢

A trait is a characteristic of a widget. And when a widget holds a particular trait, it's basically posting a story like "hey besties, I can DO this thing" β€” it's announcing a particular ability to all the other widgets. it's giving main character energy, but for capabilities. πŸ’…

Here's the standard Motif traits, with the two columns you'd normally see in the table β€” Trait Name and A Widget Holding This Trait Can Do The Following: β€” spelled out for you:

  • XmQTaccessTextual β€” Display one primary text parcel.
  • XmQTactivatable β€” Become a command button in a dialog box.
  • XmQTcareParentVisual β€” Borrow its parent's visual information.
  • XmQTcontainer β€” Manage container item children.
  • XmQTcontainerItem β€” Become a child of a container widget.
  • XmQTdialogShellSavvy β€” Become a child of a DialogShell.
  • XmQTjoinSide β€” Attach itself to one side of a suitable parent.
  • XmQTmenuSavvy β€” Become a menu child.
  • XmQTmenuSystem β€” Manage a menu system.
  • XmQTnavigator β€” Act as a navigator to a scrollable widget.
  • XmQTscrollFrame β€” Handle one or more navigator widgets.
  • XmQTspecifyRenderTable β€” Supply the names of its default render tables.
  • XmQTtakesDefault β€” Change its appearance to show that it is the default button.
  • XmQTtransfer β€” Transfer data to other widgets and/or receive data from other widgets

that's the whole roster, no cap. 🌈


ngl, traits are not often used in Motif application programs. Like, if you're just out here building an app, you will probably never touch them. πŸ™ˆ

However. Traits are very important to widget writers. like, highkey the whole thing. So if you're writing widgets, this is your moment, bestie. πŸŽ€

For complete details on traits, see the Motif Widget Writer's Guide.


okay so the next table lists the names of all the widgets and gadgets in the standard Motif widget set that hold a particular trait. for example β€” and this is the example straight from the page, so write it down πŸ“ β€” it shows that the XmQTcontainerItem trait is held by the XmIconGadget. and as the table suggests, some traits are held by many of the standard Motif widgets. iconic behaviour fr fr. πŸ‘‘


more parts incoming, don't go anywhere πŸ’œ

πŸŽ€ Trait Installation in Standard Widget Set πŸŽ€

okay bestie, the standard widget set is literally handing out traits like friendship bracelets at a sleepover 🫢 and the columns are: Trait Name β†’ Is Installed on The Following Widgets:

  • XmQTaccessTextual β€” installed on: XmLabel and all its subclasses; XmLabelGadget and all its subclasses; XmText; XmTextField. πŸ’–
  • XmQTactivatable β€” installed on: XmArrowButton; XmArrowButtonGadget; XmDrawnButton; XmPushButton; XmPushButtonGadget. πŸ”₯
  • XmQTcareParentVisual β€” installed on: All the subclasses of XmGadget (but not XmGadget itself); XmPrimitive and all its subclasses. ✨
  • XmQTcontainer β€” installed on: XmContainer. 🧚
  • XmQTcontainerItem β€” installed on: XmIconGadget. πŸ“
  • XmQTdialogShellSavvy β€” installed on: XmBulletinBoard. πŸ’…
  • XmQTjoinSide β€” No widgets install this trait (ghost town energy πŸ‘»).
  • XmQTmenuSavvy β€” installed on: XmLabel; XmDrawnButton; XmCascadeButton; XmPushButton; XmToggleButton; XmLabelGadget; XmCascadeButtonGadget; XmPushButtonGadget; XmToggleButtonGadget. 🌈
  • XmQTmenuSystem β€” installed on: XmRowColumn. πŸ‘‘
  • XmQTnavigator β€” installed on: XmScrollBar; XmSpinBox. ⭐
  • XmQTscrollFrame β€” installed on: XmNotebook; XmScrolledWindow. πŸ¦‹
  • XmQTspecifyRenderTable β€” installed on: XmBulletinBoard and all its subclasses; XmMenuShell; XmVendorShell. πŸ’œ
  • XmQTtakesDefault β€” installed on: XmPushButton; XmPushButtonGadget. 😭
  • XmQTtransfer β€” installed on: XmContainer; XmLabel and all its subclasses; XmLabelGadget and all its subclasses; XmList; XmScale; XmText; XmTextField. 🫢

Okay so here's the moment you've been waiting for bestie β€” the master list of which widget installs which traits. The original lays this out as a big table where one column is "Widget Name" and the other is "Trait Use by", i.e. Installs These Traits. And to give you a lil taste of how it reads: the table says XmArrowButton holds both XmQTactivatable and XmQTcareParentVisual. Cute, right? Let's go through every single row. πŸ’…

Fair warning before we dive in: the original table has a lil goofy moment at the top β€” there's a stray row whose widget name is just = with a totally empty trait column, sitting right before XmArrowButton. Not me explaining it, just reporting it fr fr. πŸ™ˆ Also a couple of rows in the original have an empty trait cell, and I'm flagging those as I go instead of pretending they say something they don't. Keepin' it honest. ✨


  • = β€” trait column is blank in the original. A mystery. A vibe. πŸ¦‹
  • XmArrowButton β€” XmQTactivatable, XmQTcareParentVisual
  • XmArrowButtonGadget β€” XmQTactivatable, XmQTcareParentVisual
  • XmBulletinBoard β€” XmQTdialogShellSavvy, XmQTspecifyRenderTable
  • XmCascadeButton β€” XmQTaccessTextual, XmQTcareParentVisual, XmQTmenuSavvy, XmQTtransfer
  • XmCascadeButtonGadget β€” XmQTaccessTextual, XmQTcareParentVisual, XmQTmenuSavvy, XmQTtransfer β€” and yes, the original table also shows XmComboBox sitting there in that same trait column, exactly like that. Reproducing it as-is, no editing, no cap. πŸ”₯
  • XmCommand β€” XmQTspecifyRenderTable
  • XmContainer β€” XmQTcontainer, XmQTtransfer
  • XmDialogShell β€” None
  • XmDisplay β€” None
  • XmDragContext β€” None
  • XmDragIcon β€” None
  • XmDrawingArea β€” None
  • XmDrawnButton β€” XmQTaccessTextual, XmQTactivatable, XmQTcareParentVisual, XmQTmenuSavvy, XmQTtransfer
  • XmDropTransfer β€” None
  • XmFileSelectionBox β€” XmQTspecifyRenderTable
  • XmForm β€” XmQTspecifyRenderTable
  • XmFrame β€” None
  • XmGadget β€” None
  • XmIconGadget β€” XmQTcareParentVisual, XmQTcontainerItem
  • XmLabel β€” XmQTaccessTextual, XmQTcareParentVisual, XmQTmenuSavvy, XmQTtransfer
  • XmLabelGadget β€” XmQTaccessTextual, XmQTcareParentVisual, XmQTmenuSavvy, XmQTtransfer
  • XmList β€” XmQTcareParentVisual, XmQTtransfer
  • XmMainWindow β€” trait column is blank in the original
  • XmManager β€” trait column is blank in the original
  • XmMenuShell β€” XmQTspecifyRenderTable
  • XmMessageBox β€” XmQTspecifyRenderTable
  • XmNotebook β€” XmQTscrollFrame
  • XmPanedWindow β€” trait column is blank in the original
  • XmPrimitive β€” XmQTcareParentVisual
  • XmPushButton β€” XmQTaccessTextual, XmQTactivatable, XmQTcareParentVisual, XmQTmenuSavvy, XmQTtakesDefault, XmQTtransfer
  • XmPushButtonGadget β€” XmQTaccessTextual, XmQTactivatable, XmQTcareParentVisual, XmQTmenuSavvy, XmQTtakesDefault, XmQTtransfer
  • XmRowColumn β€” XmQTmenuSystem
  • XmScale β€” XmQTtransfer
  • XmScreen β€” trait column is blank in the original

Heads up bestie: a bunch of these say None, and that's not me being lazy β€” that's literally what the original table says for those widgets. XmDialogShell, XmDisplay, XmDragContext, XmDragIcon, XmDrawingArea, XmDropTransfer, XmFrame, and XmGadget all get the big None. Respectfully. 🫢

And that's the full table, every row accounted for, nothing skipped, nothing merged, nothing invented. ✨ Don't go anywhere β€” we're not done yet, there's more coming. πŸ’–

okay so picking up right where we left off β€” here's the widget-to-trait lineup, bestie πŸ’…

  • XmScrollbar β€” traits: XmQTcareParentVisual, XmQTnavigator ✨
  • XmScrolledWindow β€” traits: XmQTscrollFrame πŸ¦‹
  • XmSelectionBox β€” traits: XmQTspecifyRenderTable πŸŽ€
  • XmSeparator β€” traits: XmQTcareParentVisual 🌸
  • XmSeparatorGadget β€” traits: XmQTcareParentVisual 🌸
  • XmSpinBox β€” traits: XmQTnavigator ✨
  • XmText β€” traits: XmQTaccessTextual, XmQTcareParentVisual, XmQTtransfer πŸ’–
  • XmTextField β€” traits: XmQTaccessTextual, XmQTcareParentVisual, XmQTtransfer πŸ’–
  • XmToggleButton β€” traits: XmQTaccessTextual, XmQTcareParentVisual, XmQTtransfer πŸ’–
  • XmToggleButtonGadget β€” traits: XmQTaccessTextual, XmQTcareParentVisual, XmQTtransfer πŸ’–
  • VendorShell β€” traits: XmQTspecifyRenderTable πŸŽ€

and lowkey, this whole table? it's the summary of how the standard Motif widgets access traits. there are two general ways for a widget to access the traits of another widget.

way number one: a widget asks another widget if it holds a particular trait. for example, XmBulletinBoard asks each of its children widgets if they hold the XmQTtakesDefault trait. and XmBulletinBoard calls none of the trait methods of XmQTtakesDefault. periodt. πŸ’…

okay so another kind of access? it's when one widget calls another widget's trait method(s). like, for example, XmBulletinBoard calls the getRenderTable trait method of the XmQTspecifyRenderTable trait. periodt.

and here's the Trait Access By breakdown, bestie β€” every single widget, the traits it accesses, and the trait methods it calls. no cap:

  • 🌸 XmArrowButton β€” accesses: None; calls: None
  • πŸ¦‹ XmArrowButtonGadget β€” accesses: None; calls: None
  • πŸ’– XmBulletinBoard β€” accesses: XmQTtakesDefault; calls: None
  • ✨ XmBulletinBoard β€” accesses: XmQTspecifyRenderTable; calls: getRenderTable
  • πŸŽ€ XmCascadeButton β€” accesses: XmQTmenuSystem; calls: Many
  • πŸ’… XmCascadeButton β€” accesses: XmQTspecifyRenderTable; calls: getRenderTable
  • 🌈 XmCascadeButtonGadget β€” accesses: XmQTmenuSystem; calls: Many
  • 🫢 XmCascadeButtonGadget β€” accesses: XmQTspecifyRenderTable; calls: getRenderTable
  • πŸ’œ XmComboBox β€” accesses: XmQTaccessTextual; calls: getValue, setValue
  • πŸ“ XmCommand β€” accesses: None; calls: None
  • 🧚 XmContainer β€” accesses: XmQTcontainerItem; calls: getValues, setValues
  • ⭐ XmContainer β€” accesses: XmQTscrollFrame; calls: getInfo
  • πŸ‘‘ XmDialogShell β€” accesses: XmQTdialogShellSavvy; calls: callMapUnmapCB
  • πŸ’€ XmDisplay β€” accesses: None; calls: None
  • πŸ™ˆ XmDragContext β€” accesses: None; calls: None
  • πŸ”₯ XmDragIcon β€” accesses: None; calls: None
  • 😭 XmDrawingArea β€” accesses: None; calls: None
  • πŸŽ€ XmDrawnButton β€” accesses: XmQTmenuSystem; calls: Many
  • ✨ XmDrawnButton β€” accesses: XmQTspecifyRenderTable; calls: getRenderTable
  • πŸ’– XmDropTransfer β€” accesses: None; calls: None
  • 🌸 XmFileSelectionBox β€” accesses: XmQTactivatable; calls: None
  • πŸ¦‹ XmForm β€” accesses: None; calls: None
  • πŸ’… XmFrame β€” accesses: None; calls: None
  • 🌈 XmGadget β€” accesses: None; calls: None
  • 🫢 XmIconGadget β€” accesses: XmQTcontainer; calls: getValues
  • πŸ’œ XmIconGadget β€” accesses: XmQTspecifyRenderTable; calls: getRenderTable
  • πŸ“ XmLabel β€” accesses: XmQTmenuSystem; calls: various methods
  • 🧚 XmLabel β€” accesses: XmQTspecifyRenderTable; calls: getRenderTable
  • ⭐ XmLabelGadget β€” accesses: XmQTmenuSystem; calls: various methods

okay so continuing the trait table, and every single widget is serving a look πŸ’…βœ¨

  • XmLabelGadget β†’ XmQTspecifyRenderTable β†’ getRenderTable πŸŽ€
  • XmList β†’ XmQTnavigator β†’ getValues ✨
  • XmList β†’ XmQTscrollFrame β†’ getInfo, init πŸ¦‹
  • XmList β†’ XmQTspecifyRenderTable β†’ getRenderTable 🌸
  • XmMainWindow β†’ XmQTmenuSystem β†’ various methods πŸ’…
  • XmManager β†’ None β†’ None 😭
  • XmMenuShell β†’ XmQTmenuSystem β†’ various methods πŸ”₯
  • XmMenuShell β†’ XmQTspecifyRenderTable β†’ getRenderTable πŸ‘‘
  • XmMessageBox β†’ XmQTactivatable β†’ None 🌈
  • XmNotebook β†’ XmQTscrollFrame β†’ init, addNavigator, removeNavigator ⭐
  • XmNotebook β†’ XmQTnavigator β†’ getValue πŸ’€
  • XmNotebook β†’ XmQTactivatable β†’ changeCB πŸ™ˆ
  • XmNotebook β†’ XmQTaccessTextual β†’ None πŸ“
  • XmPanedWindow β†’ None β†’ None 🧚
  • XmPrimitive β†’ None β†’ None πŸ’œ
  • XmPushButton β†’ XmQTmenuSystem β†’ various methods πŸ’–
  • XmPushButton β†’ XmQTspecifyRenderTable β†’ getRenderTable ✨
  • XmPushButtonGadget β†’ XmQTmenuSystem β†’ various methods πŸŽ€
  • XmPushButtonGadget β†’ XmQTspecifyRenderTable β†’ getRenderTable πŸ¦‹
  • XmRowColumn β†’ XmQTmenuSavvy β†’ getAccelerator, getMnemonic, getActivateCBName 🌸
  • XmRowColumn β†’ XmQTmenuSystem β†’ various methods πŸ’…
  • XmScale β†’ XmQTspecifyRenderTable β†’ getRenderTable πŸ”₯
  • XmScreen β†’ None β†’ None πŸ‘‘
  • XmScrollbar β†’ None β†’ None 🌈
  • XmScrolledWindow β†’ XmQTnavigator β†’ getValue ⭐
  • XmScrolledWindow β†’ XmQTscrollFrame β†’ init, addNavigator πŸ’€
  • XmSelectionBox β†’ XmQTaccessTextual β†’ setValue; πŸ™ˆ
  • XmSelectionBox β†’ XmQTactivatable β†’ None πŸ“
  • XmSeparator β†’ None β†’ None 🧚
  • XmSeparatorGadget β†’ None β†’ None πŸ’œ
  • XmSpinBox β†’ XmQTaccessTextual β†’ setValue πŸ’–
  • XmText β†’ XmQTaccessTextual β†’ getValue, setValue ✨

and that's the rest of the table, bestie, but there's still more parts coming so stay tuned πŸ‘€

okay continuing the trait table, bestie β€” same three columns as before (Widget class, Trait, Methods), just rendered as a lil list so it doesn't squish your terminal 🫢

  • XmText β†’ XmQTnavigator β€” getValue
  • XmText β†’ XmQTscrollFrame β€” getInfo, init
  • XmText β†’ XmQTspecifyRenderTable β€” getRenderTable
  • XmTextField β†’ XmQTspecifyRenderTable β€” getRenderTable
  • XmToggleButton β†’ XmQTmenuSystem β€” various methods
  • XmToggleButton β†’ XmQTspecifyRenderTable β€” getRenderTable
  • XmToggleButtonGadget β†’ XmQTmenuSystem β€” various methods
  • XmToggleButtonGadget β†’ XmQTspecifyRenderTable β€” getRenderTable
  • VendorShell β†’ XmQTspecifyRenderTable β€” getRenderTable

and that's the whole table, done, no more rows, we ate πŸ“


these next ones? not here, bestie β€” they live in the Motif Widget Writer's Guide. so if you go looking, that's where they're documented:

  • XmeTraitSet(3)
  • XmeTraitGet(3)
  • XmQTaccessTextual(3)
  • XmQTactivatable(3)
  • XmQTcareParentVisual(3)
  • XmQTcontainer(3)
  • XmQTcontainerItem(3)
  • XmQTdialogShellSavvy(3)
  • XmQTjoinSide(3)
  • XmQTmenuSavvy(3)
  • XmQTmenuSystem(3)
  • XmQTnavigator(3)
  • XmQTscrollFrame(3)
  • XmQTspecifyRenderTable(3)
  • XmQTtakesDefault(3)

like, that's fifteen whole reference pages, all catalogued, all accounted for, we love a complete list πŸ’…

and that's the end of the page, periodt. if you made it through all seven parts you are genuinely the main character of this manpage πŸ’–

okay so this whole thing lives in the file formats corner of the manual and it's titled Traits β€” so when you go looking for it, that's the name to search. hope traits make sense now bestie, go off and register some, ily πŸŽ€βœ¨πŸ¦‹