TRAITS(5)
π 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:XmLabeland all its subclasses;XmLabelGadgetand all its subclasses;XmText;XmTextField. πXmQTactivatableβ installed on:XmArrowButton;XmArrowButtonGadget;XmDrawnButton;XmPushButton;XmPushButtonGadget. π₯XmQTcareParentVisualβ installed on: All the subclasses ofXmGadget(but notXmGadgetitself);XmPrimitiveand 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:XmBulletinBoardand all its subclasses;XmMenuShell;XmVendorShell. πXmQTtakesDefaultβ installed on:XmPushButton;XmPushButtonGadget. πXmQTtransferβ installed on:XmContainer;XmLabeland all its subclasses;XmLabelGadgetand 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,XmQTcareParentVisualXmArrowButtonGadgetβXmQTactivatable,XmQTcareParentVisualXmBulletinBoardβXmQTdialogShellSavvy,XmQTspecifyRenderTableXmCascadeButtonβXmQTaccessTextual,XmQTcareParentVisual,XmQTmenuSavvy,XmQTtransferXmCascadeButtonGadgetβXmQTaccessTextual,XmQTcareParentVisual,XmQTmenuSavvy,XmQTtransferβ and yes, the original table also showsXmComboBoxsitting there in that same trait column, exactly like that. Reproducing it as-is, no editing, no cap. π₯XmCommandβXmQTspecifyRenderTableXmContainerβXmQTcontainer,XmQTtransferXmDialogShellβNoneXmDisplayβNoneXmDragContextβNoneXmDragIconβNoneXmDrawingAreaβNoneXmDrawnButtonβXmQTaccessTextual,XmQTactivatable,XmQTcareParentVisual,XmQTmenuSavvy,XmQTtransferXmDropTransferβNoneXmFileSelectionBoxβXmQTspecifyRenderTableXmFormβXmQTspecifyRenderTableXmFrameβNoneXmGadgetβNoneXmIconGadgetβXmQTcareParentVisual,XmQTcontainerItemXmLabelβXmQTaccessTextual,XmQTcareParentVisual,XmQTmenuSavvy,XmQTtransferXmLabelGadgetβXmQTaccessTextual,XmQTcareParentVisual,XmQTmenuSavvy,XmQTtransferXmListβXmQTcareParentVisual,XmQTtransferXmMainWindowβ trait column is blank in the originalXmManagerβ trait column is blank in the originalXmMenuShellβXmQTspecifyRenderTableXmMessageBoxβXmQTspecifyRenderTableXmNotebookβXmQTscrollFrameXmPanedWindowβ trait column is blank in the originalXmPrimitiveβXmQTcareParentVisualXmPushButtonβXmQTaccessTextual,XmQTactivatable,XmQTcareParentVisual,XmQTmenuSavvy,XmQTtakesDefault,XmQTtransferXmPushButtonGadgetβXmQTaccessTextual,XmQTactivatable,XmQTcareParentVisual,XmQTmenuSavvy,XmQTtakesDefault,XmQTtransferXmRowColumnβXmQTmenuSystemXmScaleβXmQTtransferXmScreenβ trait column is blank in the original
Heads up bestie: a bunch of these sayNone, 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, andXmGadgetall get the bigNone. 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βgetValueXmTextβXmQTscrollFrameβgetInfo,initXmTextβXmQTspecifyRenderTableβgetRenderTableXmTextFieldβXmQTspecifyRenderTableβgetRenderTableXmToggleButtonβXmQTmenuSystemβvarious methodsXmToggleButtonβXmQTspecifyRenderTableβgetRenderTableXmToggleButtonGadgetβXmQTmenuSystemβvarious methodsXmToggleButtonGadgetβXmQTspecifyRenderTableβgetRenderTableVendorShellβXmQTspecifyRenderTableβgetRenderTable
and that's the whole table, done, no more rows, we ate π
π RELATED π
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 πβ¨π¦
π¦ where this page comes from
- alpine 3.24: motif-doc 2.5.2-r0 Β· LGPL-2.1-or-later
- arch rolling: openmotif 2.3.8-4 Β· LGPL-2.1-or-later
- centos-stream 9: motif-devel 2.3.4-32.el9 Β· LGPLv2+
- centos-stream 9: motif-devel 2.3.4-32.el9 Β· LGPLv2+
- epel 10: motif-devel 2.3.8-2.el10_2 Β· LicenseRef-Callaway-LGPLv2+
- fedora 43: motif-devel 2.3.8-1.fc43 Β· LicenseRef-Callaway-LGPLv2+
- fedora 43: motif-devel 2.3.8-1.fc43 Β· LicenseRef-Callaway-LGPLv2+
- fedora 43: motif-devel 2.3.8-2.fc43 Β· LicenseRef-Callaway-LGPLv2+
- fedora 43: motif-devel 2.3.8-2.fc43 Β· LicenseRef-Callaway-LGPLv2+
- fedora 44: motif-devel 2.3.8-3.fc44 Β· LicenseRef-Callaway-LGPLv2+
- fedora 44: motif-devel 2.3.8-3.fc44 Β· LicenseRef-Callaway-LGPLv2+
- nixos 26.05: motif 2.3.8
- nixpkgs unstable: motif 2.3.8
- opensuse-leap 16.0: motif-devel 2.3.8-bp160.1.1 Β· LGPL-2.1-or-later
- opensuse-leap 16.0: motif-devel 2.3.8-bp160.1.1 Β· LGPL-2.1-or-later
- opensuse-leap 16.0: motif-devel 2.3.8-bp160.1.1 Β· LGPL-2.1-or-later
- opensuse-leap 16.0: motif-devel 2.3.8-bp160.1.1 Β· LGPL-2.1-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms