XMPUSHBUTTON(3)
okay bestie, welcome to XmPushButton(library call) π this is the manual page for the PushButton widget class, and we're about to make it make sense.
πΈ NAME πΈ
XmPushButton β The PushButton widget class π
π SYNOPSIS π
#include <Xm/PushB.h>
β¨ DESCRIPTION β¨
okay so PushButton is literally the widget that issues commands within an application. It's giving a text label or pixmap surrounded by a border shadow. When a PushButton is selected, the shadow changes to give the appearance that it has been pressed in. When a PushButton is unselected, the shadow changes to give the appearance that it is out. π
The default behavior associated with a PushButton in a menu depends on the type of menu system in which it resides. By default, <Btn1> controls the behavior of the PushButton. In addition, <Btn3> controls the behavior of the PushButton if it resides in a PopupMenu system. The actual mouse button used is determined by its RowColumn parent.
Thickness for a second shadow, used when the PushButton is the default button, may be specified with the XmNshowAsDefault resource. If it has a nonzero value, the Label's resources XmNmarginLeft, XmNmarginRight, XmNmarginTop, and XmNmarginBottom may be modified to accommodate the second shadow.
If an initial value is specified for XmNarmPixmap but not for XmNlabelPixmap, the XmNarmPixmap value is used for XmNlabelPixmap.
PushButton uses the XmQTmenuSystem and XmQTspecifyRenderTable traits, and holds the XmQactivatable, XmQTmenuSavvy, and XmQTtakesDefault traits.
π¦ Classes π¦
PushButton inherits behavior, resources, and traits from Core, XmPrimitive, and XmLabel.
The class pointer is xmPushButtonWidgetClass.
The class name is XmPushButton.
π New Resources π
The following table defines a set of widget resources used by the programmer to specify data. The programmer can also set the resource values for the inherited classes to set attributes for this widget. To reference a resource by name or by class in a .Xdefaults file, remove the XmN or XmC prefix and use the remaining letters. To specify one of the defined values for a resource in a .Xdefaults file, remove the Xm prefix and use the remaining letters (in either lowercase or uppercase, but include any underscores between words). The codes in the access column indicate if the given resource can be set at creation time (C), set by using XtSetValues (S), retrieved by using XtGetValues (G), or is not applicable (N/A).
π XmPushButton Resource Set π
XmNactivateCallbackβ Class:XmCCallback; Type:XtCallbackList; Default:NULL; Access:CXmNarmCallbackβ Class:XmCCallback; Type:XtCallbackList; Default:NULL; Access:CXmNarmColorβ Class:XmCArmColor; Type:Pixel; Default:dynamic; Access:CSGXmNarmPixmapβ Class:XmCArmPixmap; Type:Pixmap; Default:XmUNSPECIFIED_PIXMAP; Access:CSGXmNdefaultButtonShadowThicknessβ Class:XmCDefaultButtonShadowThickness; Type:Dimension; Default:dynamic; Access:CSGXmNdisarmCallbackβ Class:XmCCallback; Type:XtCallbackList; Default:NULL; Access:CXmNfillOnArmβ Class:XmCFillOnArm; Type:Boolean; Default:True; Access:CSGXmNmultiClickβ Class:XmCMultiClick; Type:unsigned char; Default:dynamic; Access:CSGXmNshowAsDefaultβ Class:XmCShowAsDefault; Type:Dimension; Default:0; Access:CSG
π«Ά Resource Descriptions π«Ά
XmNactivateCallbackβ Specifies the list of callbacks that is called when PushButton is activated. PushButton is activated when the user presses and releases the active mouse button while the pointer is inside that widget. Activating the PushButton also disarms it. For this callback, the reason isXmCR_ACTIVATE. This callback uses theXmQTactivatabletrait.XmNarmCallbackβ Specifies the list of callbacks that is called when PushButton is armed. PushButton is armed when the user presses the active mouse button while the pointer is inside that widget. For this callback, the reason isXmCR_ARM.XmNarmColorβ Specifies the color with which to fill the armed button.XmNfillOnArmmust be set toTruefor this resource to have an effect. The default for a color display is a color between the background and the bottom shadow color. For a monochrome display, the default is set to the foreground color, and any text in the label appears in the background color when the button is armed.
This resource is also used when the button is armed in a menu and the XmNenableEtchedInMenu resource is True.
XmNarmPixmapβ Specifies the pixmap to be used as the button face ifXmNlabelTypeisXmPIXMAPorXmPIXMAP_AND_STRINGand PushButton is armed. This resource is disabled when the PushButton is in a menu.XmNdefaultButtonShadowThicknessβ This resource specifies the width of the default button indicator shadow. If this resource is0(zero), the width of the shadow comes from the value of theXmNshowAsDefaultresource. If this resource is greater than0, theXmNshowAsDefaultresource is only used to specify whether this button is the default. The default value is the initial value ofXmNshowAsDefault.XmNdisarmCallbackβ Specifies the list of callbacks that is called when PushButton is disarmed. PushButton is disarmed when the user presses and releases the active mouse button while the pointer is inside that widget. For this callback, the reason isXmCR_DISARM.XmNfillOnArmβ Forces the PushButton to fill the background of the button with the color specified byXmNarmColorwhen the button is armed and when this resource is set toTrue. IfFalse, only the top and bottom shadow colors are switched. When the PushButton is in a menu, this resource is ignored and assumed to beFalse.XmNmultiClickβ okay so here's the vibe π«Ά: you click the button, and then you click it again super fast, all within the time span the display calls its multiclick time. That second click is a whole situation, and this resource decides what happens to it.
If this resource is set to XmMULTICLICK_DISCARD, that second click does not get processed β nope, not today, it's giving ignored. π If it's set to XmMULTICLICK_KEEP, the event is processed and click_count in the callback structure gets incremented. π
Now the defaults, because they're lowkey different depending on where your button lives: when the button is inside a menu, the default is XmMULTICLICK_DISCARD. Otherwise β for a button not in a menu β XmMULTICLICK_KEEP is the default value. periodt.
XmNshowAsDefaultβ this one is about making your button the main character default button. π
If XmNdefaultButtonShadowThickness is greater than 0 (zero), then a value greater than 0 in this resource specifies to mark this button as the default button.
If XmNdefaultButtonShadowThickness is 0, then a value greater than 0 in this resource specifies to mark this button as the default button with the shadow thickness specified by this resource.
Here's the emphasis tea β: when the Display resource XmNdefaultButtonEmphasis has a value of XmEXTERNAL_HIGHLIGHT (which is the default), PushButton draws the location cursor outside of the outer shadow. When this resource has a value of XmINTERNAL_HIGHLIGHT, the highlight gets drawn between the inner and outer shadows. The space between the shadow and the default shadow is equal to the sum of both shadows. β¨
The default value is 0.
When this value is not 0, the Label resources XmNmarginLeft, XmNmarginRight, XmNmarginTop, and XmNmarginBottom may be modified to accommodate that second shadow. No cap.
Heads up bestie π¨: this resource is disabled when the PushButton is in a menu.
πΈ Inherited Resources πΈ
PushButton inherits behavior and resources from the superclasses described in the following tables. For a complete description of each resource, refer to the reference page for that superclass. π
π XmLabel Resource Set π
okay so real talk, this is the XmLabel resource set and she is long, but every single row is laid out the same way: Name, Class, Type, Default, Access. That's it. Five little columns of truth π«Ά. And the access on literally every one of them? CSG. All of them. Every last one. periodt π
XmNacceleratorβ classXmCAccelerator, typeString, defaultNULL, accessCSG.XmNacceleratorTextβ classXmCAcceleratorText, typeXmString, defaultNULL, accessCSG.XmNalignmentβ classXmCAlignment, typeunsigned char, defaultdynamic, accessCSG.XmNfontListβ classXmCFontList, typeXmFontList, defaultdynamic, accessCSG.XmNlabelInsensitivePixmapβ classXmCLabelInsensitivePixmap, typePixmap, defaultXmUNSPECIFIED_PIXMAP, accessCSG.XmNlabelPixmapβ classXmCLabelPixmap, typePixmap, defaultdynamic, accessCSG.XmNlabelStringβ classXmCXmString, typeXmString, defaultdynamic, accessCSG.XmNlabelTypeβ classXmCLabelType, typeunsigned char, defaultXmSTRING, accessCSG.XmNmarginBottomβ classXmCMarginBottom, typeDimension, defaultdynamic, accessCSG.XmNmarginHeightβ classXmCMarginHeight, typeDimension, default2, accessCSG.XmNmarginLeftβ classXmCMarginLeft, typeDimension, defaultdynamic, accessCSG.XmNmarginRightβ classXmCMarginRight, typeDimension, defaultdynamic, accessCSG.XmNmarginTopβ classXmCMarginTop, typeDimension, defaultdynamic, accessCSG.XmNmarginWidthβ classXmCMarginWidth, typeDimension, default2, accessCSG.XmNmnemonicβ classXmCMnemonic, typeKeySym, defaultNULL, accessCSG.XmNmnemonicCharSetβ classXmCMnemonicCharSet, typeString, defaultXmFONTLIST_DEFAULT_TAG, accessCSG.XmNpixmapPlacementβ classXmCPixmapPlacement, typeunsigned int, defaultXmPIXMAP_LEFT, accessCSG.XmNpixmapTextPaddingβ classXmCSpace, typeDimension, default2, accessCSG. (yes the class isXmCSpace, not a matching name β she's quirky like that, no notes π¦)XmNrecomputeSizeβ classXmCRecomputeSize, typeBoolean, defaultTrue, accessCSG.XmNrenderTableβ classXmCRenderTable, typeXmRenderTable, defaultdynamic, accessCSG.XmNstringDirectionβ classXmCStringDirection, typeXmStringDirection, defaultdynamic, accessCSG.
and that's the whole resource set bestie, all 21 of them, not a single row skipped π notice how a bunch of these defaults are just dynamic β which is giving "we'll sort it out later" energy and honestly? relatable β¨ keep scrolling, there's more πΈ
Okay bestie, this is the part where XmPushButton shows you everything it inherited from its parent, XmPrimitive π β like when you find out your fave got their whole lewk from their mom. Every single one of these resources is available on your push button, so you can tweak them to your heart's content. Here's the full roster, no skips, no cuts π
β¨ Inherited Resources from XmPrimitive β¨
Each one shows up as: resource name, its resource class, its type, its default, and who's allowed to touch it (the access column). Slay responsibly π«Ά
XmNbottomShadowColorβ classXmCBottomShadowColor, typePixel, default dynamic, accessCSGπXmNbottomShadowPixmapβ classXmCBottomShadowPixmap, typePixmap, defaultXmUNSPECIFIED_PIXMAP, accessCSGπXmNconvertCallbackβ classXmCCallback, typeXtCallbackList, defaultNULL, accessCπXmNforegroundβ classXmCForeground, typePixel, default dynamic, accessCSGπXmNhelpCallbackβ classXmCCallback, typeXtCallbackList, defaultNULL, accessCπXmNhighlightColorβ classXmCHighlightColor, typePixel, default dynamic, accessCSGβ¨XmNhighlightOnEnterβ classXmCHighlightOnEnter, typeBoolean, defaultFalse, accessCSGπXmNhighlightPixmapβ classXmCHighlightPixmap, typePixmap, default dynamic, accessCSGπΈXmNhighlightThicknessβ classXmCHighlightThickness, typeDimension, default2, accessCSGπXmNlayoutDirectionβ classXmCLayoutDirection, typeXmDirection, default dynamic, accessCGπ§XmNnavigationTypeβ classXmCNavigationType, typeXmNavigationType, defaultXmNONE, accessCSGπΆββοΈXmNpopupHandlerCallbackβ classXmCCallback, typeXtCallbackList, defaultNULL, accessCπͺXmNshadowThicknessβ classXmCShadowThickness, typeDimension, default2, accessCSGπXmNtopShadowColorβ classXmCTopShadowColor, typePixel, default dynamic, accessCSGπXmNtopShadowPixmapβ classXmCTopShadowPixmap, typePixmap, default dynamic, accessCSGπ¦XmNtraversalOnβ classXmCTraversalOn, typeBoolean, defaultTrue, accessCSGπ₯XmNunitTypeβ classXmCUnitType, typeunsigned char, default dynamic, accessCSGπXmNuserDataβ classXmCUserData, typeXtPointer, defaultNULL, accessCSGποΈ
Heads up bestie: those access codes aren't decoration βC,S, andGtell you when you're allowed to read or write each one, so don't just go assigning whatever whenever. The original lays out the rules, and they're real π
XmNacceleratorsβ classXmCAccelerators, typeXtAccelerators, defaultdynamic, accessCSGXmNancestorSensitiveβ classXmCSensitive, typeBoolean, defaultdynamic, accessGXmNbackgroundβ classXmCBackground, typePixel, defaultdynamic, accessCSGXmNbackgroundPixmapβ classXmCPixmap, typePixmap, defaultXmUNSPECIFIED_PIXMAP, accessCSGXmNborderColorβ classXmCBorderColor, typePixel, defaultXtDefaultForeground, accessCSGXmNborderPixmapβ classXmCPixmap, typePixmap, defaultXmUNSPECIFIED_PIXMAP, accessCSGXmNborderWidthβ classXmCBorderWidth, typeDimension, default0, accessCSGXmNcolormapβ classXmCColormap, typeColormap, defaultdynamic, accessCGXmNdepthβ classXmCDepth, typeint, defaultdynamic, accessCGXmNdestroyCallbackβ classXmCCallback, typeXtCallbackList, defaultNULL, accessCXmNheightβ classXmCHeight, typeDimension, defaultdynamic, accessCSGXmNinitialResourcesPersistentβ classXmCInitialResourcesPersistent, typeBoolean, defaultTrue, accessCXmNmappedWhenManagedβ classXmCMappedWhenManaged, typeBoolean, defaultTrue, accessCSGXmNscreenβ classXmCScreen, typeScreen *, defaultdynamic, accessCGXmNsensitiveβ classXmCSensitive, typeBoolean, defaultTrue, accessCSGXmNtranslationsβ classXmCTranslations, typeXtTranslations, defaultdynamic, accessCSGXmNwidthβ classXmCWidth, typeDimension, defaultdynamic, accessCSGXmNxβ classXmCPosition, typePosition, default0, accessCSGXmNyβ classXmCPosition, typePosition, default0, accessCSG
π Callback Information π
ok so every callback you register gets handed a pointer to this little guy right here β it's giving "here's your tea, bestie, drink up":
typedef struct
{
int reason;
XEvent * event;
int click_count;
} XmPushButtonCallbackStruct;
reasonβ tells you why the callback got invoked in the first place. the whole receipts, basically.eventβ points at theXEventthat triggered the callback. like, the actual moment it happened.click_countβ β¨ read this one carefully β¨ this value is only valid whenreasonisXmCR_ACTIVATE. it holds the number of clicks in the last multiclick sequence if theXmNmultiClickresource is set toXmMULTICLICK_KEEPβ otherwise it just contains1. and lowkey important: whenXmNmultiClickisXmMULTICLICK_KEEP, the activate callback gets invoked for each click. so yeah. every. single. one.
π Translations π
XmPushButton includes translations from Primitive.
heads up bestie: altering translations in#overrideor#augmentmode is undefined. no cap, just don't. it's giving undefined behaviour energy and we are NOT about that π
Additional XmPushButton translations for XmPushButtons that are not in a menu system are described in the following list.
The following key names are listed in the X standard key event translation table syntax. this format? yeah, it's literally the exact one Motif uses to specify which widget actions line up with a given key. there's a lil brief overview of the format over in VirtualBindings(3) if you want the vibe check π¦ β and for the full, complete, no-details-skipped description of the format, please refer to the X Toolkit Instrinsics Documentation.
c<Btn1Down>:
ButtonTakeFocus()
βΌc<Btn1Down>:
Arm()
βΌc<Btn1Down>,βΌc<Btn1Up>:
Activate() Disarm()
βΌc<Btn1Down>(2+):
MultiArm()
βΌc<Btn1Up>(2+):
MultiActivate()
βΌc<Btn1Up>:
Activate() Disarm()
βΌc<Btn2Down>:
ProcessDrag()
:<Key><osfActivate>:
PrimitiveParentActivate()
:<Key><osfCancel>:
PrimitiveParentCancel()
:<Key><osfSelect>:
ArmAndActivate()
:<Key><osfHelp>:
Help()
βΌs βΌm βΌa <Key>Return:
PrimitiveParentActivate()
βΌs βΌm βΌa <Key>space:
ArmAndActivate()
okay so XmPushButton inherits its menu traversal translations from XmLabel, bestie π. And there's a whole extra little translation buffet for PushButtons that live inside a menu system, listed right below. Important vibe check: in a Popup menu system, <Btn3> also does all the <Btn1> things. noted! π
The key names down here are written in the X standard key event translation table syntax β that's the exact format Motif uses to say "this widget action happens when you press this key." There's a lil overview of the format over in VirtualBindings(3), and if you want the whole enchilada, go read the X Toolkit Intrinsics Documentation. πβ¨
<Btn2Down>:
ProcessDrag()
c<Btn1Down>:
MenuButtonTakeFocus()
c<Btn1Up>:
MenuButtonTakeFocusUp()
βΌc<BtnDown>:
BtnDown()
βΌc<BtnUp>:
BtnUp()
:<Key><osfSelect>:
ArmAndActivate()
:<Key><osfActivate>:
ArmAndActivate()
:<Key><osfCancel>:
MenuEscape()
:<Key><osfHelp>:
Help()
βΌs βΌm βΌa <Key>Return:
ArmAndActivate()
βΌs βΌm βΌa <Key>space:
ArmAndActivate()
β¨ Action Routines β¨
the moment you've all been waiting for β the XmPushButton action routines, bestie π
Activate()
Draws the shadow in the unarmed state. If the button is not in a menu, and if XmNfillOnArm is set to True, the background color reverts to the unarmed color. If XmNlabelType is XmPIXMAP or XmPIXMAP_AND_STRING, XmNlabelPixmap is used for the button face. And if the pointer is still within the button, this action calls the callbacks for XmNactivateCallback. π«Ά
Arm()
Arms the PushButton, periodt. Draws the shadow in the armed state. If the button isn't in a menu and XmNfillOnArm is True, it fills the button with the color specified by XmNarmColor. If XmNlabelType is XmPIXMAP or XmPIXMAP_AND_STRING, XmNarmPixmap is used for the button face. It calls the XmNarmCallback callbacks. π₯
ArmAndActivate()
two moods, depending on where you at:
- In a menu: unposts all menus in the menu hierarchy and, unless the button is already armed, calls the
XmNarmCallbackcallbacks. This action calls theXmNactivateCallbackandXmNdisarmCallbackcallbacks. - Outside a menu: draws the shadow in the armed state and, if
XmNfillOnArmis set toTrue, fills the button with the color specified byXmNarmColor. IfXmNlabelTypeisXmPIXMAPorXmPIXMAP_AND_STRING,XmNarmPixmapis used for the button face. This action calls theXmNarmCallbackcallbacks.
Outside a menu, this action also arranges for the following to happen, either immediately or at a later time: the shadow is drawn in the unarmed state and, if XmNfillOnArm is set to True, the background color reverts to the unarmed color. If XmNlabelType is XmPIXMAP or XmPIXMAP_AND_STRING, XmNlabelPixmap is used for the button face. The XmNactivateCallback and XmNdisarmCallback callbacks are called. π«
BtnDown()
This action unposts any menus posted by the PushButton's parent menu, disables keyboard traversal for the menu, and enables mouse traversal for the menu. It draws the shadow in the armed state and, unless the button is already armed, calls the XmNarmCallback callbacks. π±οΈ
BtnUp()
Unposts all menus in the menu hierarchy and activates the PushButton. It calls the XmNactivateCallback callbacks and then the XmNdisarmCallback callbacks. π
ButtonTakeFocus()
Causes the PushButton to take keyboard focus when Ctrl<Btn1Down> is pressed, without activating the widget. no accidental chaos, we love to see it π
Disarm()
Calls the callbacks for XmNdisarmCallback. short. sweet. iconic. β¨
Help()
In a Pulldown or Popup MenuPane, unposts all menus in the menu hierarchy and, when the shell's keyboard focus policy is XmEXPLICIT, restores keyboard focus to the widget that had the focus before the menu system was entered. This action calls the callbacks for XmNhelpCallback if any exist. If there are no help callbacks for this widget, this action calls the help callbacks for the nearest ancestor that has them. ππ
MenuShellPopdownOne()
- In a top-level Pulldown MenuPane from a MenuBar, unposts the menu, disarms the MenuBar CascadeButton and the MenuBar; and, when the shell's keyboard focus policy is
XmEXPLICIT, restores keyboard focus to the widget that had the focus before the MenuBar was entered. In other Pulldown MenuPanes, it unposts the menu. - In a Popup MenuPane, this action unposts the menu and restores keyboard focus to the widget from which the menu was posted.
everybody gets put back exactly where they belong, we stan a considerate king π
MultiActivate()
- If
XmNmultiClickisXmMULTICLICK_DISCARD, this action does nothing. π - If
XmNmultiClickisXmMULTICLICK_KEEP, this action incrementsclick_countin the callback structure and draws the shadow in the unarmed state. If the button is not in a menu and ifXmNfillOnArmis set toTrue, the background color reverts to the unarmed color. IfXmNlabelTypeisXmPIXMAP, theXmNlabelPixmapis used for the button face. If the pointer is within the PushButton, calls the callbacks forXmNactivateCallbackandXmNdisarmCallback.
MultiArm()
- If
XmNmultiClickisXmMULTICLICK_DISCARD, this action does nothing. π - If
XmNmultiClickisXmMULTICLICK_KEEP, this action draws the shadow in the armed state. If the button is not in a menu and ifXmNfillOnArmis set toTrue, this action fills the button with the color specified byXmNarmColor. IfXmNlabelTypeisXmPIXMAP, theXmNarmPixmapis used for the button face. This action calls theXmNarmCallbackcallbacks.
ProcessDrag()
Drags the contents of a PushButton label, identified when BTransfer is pressed. This action sets the XmNconvertProc of the DragContext to a function that calls the XmNconvertCallback procedures, possibly multiple times, for the _MOTIF_DROP selection.
β οΈ This action is undefined for PushButtons used in a menu system. like, undefined-undefined. do not. π ββοΈ
π Additional Behavior π
this widget has some extra little behaviors, bestie, and they're giving main character energy:
<EnterWindow>
In a menu, if keyboard traversal is enabled, this action does nothing. Otherwise, it draws the shadow in the armed state and calls the XmNarmCallback callbacks.
If the PushButton is not in a menu and the cursor leaves and then reenters the PushButton's window while the button is pressed, this action draws the shadow in the armed state. If XmNfillOnArm is set to True, it also fills the button with the color specified by XmNarmColor. If XmNlabelType is XmPIXMAP or XmPIXMAP_AND_STRING, XmNarmPixmap is used for the button face. π¦
<LeaveWindow>
In a menu, if keyboard traversal is enabled, this action does nothing. Otherwise, it draws the shadow in the unarmed state and calls the XmNdisarmCallback callbacks.
If the PushButton is not in a menu and the cursor leaves the PushButton's window while the button is pressed, this action draws the shadow in the unarmed state. If XmNfillOnArm is set to True, the background color reverts to the unarmed color. If XmNlabelType is XmPIXMAP or XmPIXMAP_AND_STRING, the XmNlabelPixmap is used for the button face. π
π Virtual Bindings π
The bindings for virtual keys are vendor specific β iykyk, it depends on who made your setup. For info about bindings for virtual buttons and keys, go peek at VirtualBindings(3). β¨
π RELATED π
your lil study group, fr fr β go read these next:
Core(3)XmCreatePushButton(3)XmLabel(3)XmPrimitive(3)XmRowColumn(3)XmVaCreatePushButton(3)XmVaCreateManagedPushButton(3)
and that's a wrap on the XmPushButton library call page, bestie ππ you just read the whole thing, no cap. that footer down there is the XmPushButton library call</> tag β go forth and push some buttons, you absolute icon πβ¨
π¦ 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