XMPRIMITIVE(3)
π XmPrimitive π
okay so this is XmPrimitive(library call) from the Xm library, and bestie, it's literally the blueprint for a whole family of widgets. let's get into it π¦
β¨ NAME β¨
XmPrimitive β the Primitive widget class π
πΈ SYNOPSIS πΈ
#include <Xm/Xm.h>
π DESCRIPTION π
okay so listen. Primitive is a widget class, but it's not out here living its own life β it's a supporting superclass for other widget classes. it's giving backstage crew energy, and honestly? iconic for that. π
what does it actually handle? so glad you asked:
- border drawing and highlighting β¨
- traversal activation and deactivation
- and all the various callback lists that Primitive widgets need
and one more thing, no cap: Primitive and all its subclasses hold the XmQTcareParentVisual trait. it's a family trait, iykyk. π§¬
π Data Transfer Behavior
okay so real talk: Primitive has no widget class conversion procedure and no destination procedure. none. zero. that's not its job, bestie. π
so who's handling it?
- Subclasses and the
XmNconvertCallbackprocedures are responsible for any conversion of selections. - Subclasses and the subclass
XmNdestinationCallbackprocedures are responsible for any data transfers to the widget.
that's the whole vibe. it delegates. main character energy is knowing when to hand things off. π
π¦ Classes
Primitive inherits behavior, resources, and traits from Core. (yes, Core. the whole lineage thing is real. π³)
- The class pointer is
xmPrimitiveWidgetClass. - The class name is
XmPrimitive.
β 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).
okay and the access column codes? here's the key, bestie π:
- C β can be set at creation time
- S β can be set by using
XtSetValues - G β can be retrieved by using
XtGetValues - N/A β not applicable
now here's the XmPrimitive Resource Set in all its glory, presented as a list because we're terminal girlies and tables are lowkey not it πΈ:
XmNbottomShadowColorβ Class:XmCBottomShadowColorΒ· Type:PixelΒ· Default: dynamic Β· Access:CSGXmNbottomShadowPixmapβ Class:XmCBottomShadowPixmapΒ· Type:PixmapΒ· Default:XmUNSPECIFIED_PIXMAPΒ· Access:CSGXmNconvertCallbackβ Class:XmCCallbackΒ· Type:XtCallbackListΒ· Default:NULLΒ· Access:CXmNforegroundβ Class:XmCForegroundΒ· Type:PixelΒ· Default: dynamic Β· Access:CSGXmNhelpCallbackβ Class:XmCCallbackΒ· Type:XtCallbackListΒ· Default:NULLΒ· Access:CXmNhighlightColorβ Class:XmCHighlightColorΒ· Type:PixelΒ· Default: dynamic Β· Access:CSGXmNhighlightOnEnterβ Class:XmCHighlightOnEnterΒ· Type:BooleanΒ· Default:FalseΒ· Access:CSGXmNhighlightPixmapβ Class:XmCHighlightPixmapΒ· Type:PixmapΒ· Default: dynamic Β· Access:CSGXmNhighlightThicknessβ Class:XmCHighlightThicknessΒ· Type:DimensionΒ· Default:2Β· Access:CSGXmNlayoutDirectionβ Class:XmCLayoutDirectionΒ· Type:XmDirectionΒ· Default: dynamic Β· Access:CGXmNnavigationTypeβ Class:XmCNavigationTypeΒ· Type:XmNavigationTypeΒ· Default:XmNONEΒ· Access:CSGXmNpopupHandlerCallbackβ Class:XmCCallbackΒ· Type:XtCallbackListΒ· Default:NULLΒ· Access:CXmNshadowThicknessβ Class:XmCShadowThicknessΒ· Type:DimensionΒ· Default:2Β· Access:CSGXmNtoolTipStringβ Class:XmCToolTipStringΒ· Type:XmStringΒ· Default:NULLΒ· Access:CSGXmNtopShadowColorβ Class:XmCTopShadowColorΒ· Type:PixelΒ· Default: dynamic Β· Access:CSGXmNtopShadowPixmapβ Class:XmCTopShadowPixmapΒ· Type:PixmapΒ· Default: dynamic Β· Access:CSGXmNtraversalOnβ Class:XmCTraversalOnΒ· Type:BooleanΒ· Default:TrueΒ· Access:CSGXmNunitTypeβ Class:XmCUnitTypeΒ· Type:unsigned charΒ· Default: dynamic Β· Access:CSGXmNuserDataβ Class:XmCUserDataΒ· Type:XtPointerΒ· Default:NULLΒ· Access:CSG
π XmNbottomShadowColor
Specifies the color to use to draw the bottom and right sides of the border shadow. This color is used if the XmNtopShadowPixmap resource is unspecified.
heads up bestie: that conditional is doing WORK. the color only kicks in when XmNtopShadowPixmap is unspecified. π
π XmNbottomShadowPixmap
Specifies the pixmap to use to draw the bottom and right sides of the border shadow.
okay that's part one, and we are so not done yet β more parts incoming, don't go anywhere πβ¨
XmNconvertCallbackβ a whole list of callbacks that fires when somebody asks your widget to convert a selection π . The type of the structure whose address gets handed to these callbacks isXmConvertCallbackStruct, and the reason isXmCR_OK.XmNforegroundβ the foreground drawing color that Primitive widgets use. That's the whole assignment, bestie. β¨XmNhelpCallbackβ the list of callbacks that goes off when the help key is pressed. The reason the callback sends isXmCR_HELP. π«ΆXmNhighlightColorβ the color of the highlighting rectangle. This color is used only if the highlight pixmap resource isXmUNSPECIFIED_PIXMAP.XmNhighlightOnEnterβ says whether the highlighting rectangle gets drawn when the cursor moves into the widget. Okay so it depends on the shell's focus policy, so stay with me:- if the shell's focus policy is
XmEXPLICIT, this resource is ignored, and the widget is highlighted when it has the focus. - if the shell's focus policy is
XmPOINTERand this resource isTrue, the highlighting rectangle is drawn when the cursor moves into the widget. π - if the shell's focus policy is
XmPOINTERand this resource isFalse, the highlighting rectangle is not drawn when the cursor moves into the widget. - the default is
False.
- if the shell's focus policy is
XmNhighlightPixmapβ the pixmap used to draw the highlighting rectangle. πXmNhighlightThicknessβ how thick the highlighting rectangle is.XmNlayoutDirectionβ the direction the components of the primitive (strings included, bestie) get laid out in. Values are of typeXmDirection. If the widget's parent is a primitive or a shell, the value is inherited from the widget's parent. Otherwise it's inherited from the closest ancestor vendor or menu shell. Go read theXmDirection(3)reference page for the possible direction values. π¦XmNnavigationTypeβ decides whether the widget is a tab group or not. The options are giving:XmNONEβ says the widget is not a tab group.XmTAB_GROUPβ says the widget is a tab group, unless theXmNnavigationTypeof another widget in the hierarchy isXmEXCLUSIVE_TAB_GROUP.XmSTICKY_TAB_GROUPβ says the widget is a tab group even if theXmNnavigationTypeof another widget in the hierarchy isXmEXCLUSIVE_TAB_GROUP. Sticky means sticky, periodt.XmEXCLUSIVE_TAB_GROUPβ says the widget is a tab group AND that widgets in the hierarchy whoseXmNnavigationTypeisXmTAB_GROUPare not tab groups. Very main character of it.- When a parent widget has an
XmNnavigationTypeofXmEXCLUSIVE_TAB_GROUP, traversal of non-tab-group widgets within the group is based on the order of those widgets in their parent'sXmNchildrenlist. - When the
XmNnavigationTypeof any widget in a hierarchy isXmEXCLUSIVE_TAB_GROUP, traversal of tab groups in the hierarchy proceeds to widgets in the order in which theirXmNnavigationTyperesources were specified asXmEXCLUSIVE_TAB_GROUPorXmSTICKY_TAB_GROUPβ whether that happened by creating the widgets with that value, by callingXtSetValues, or by callingXmAddTabGroup.
- When a parent widget has an
XmNpopupHandlerCallbackβ lets the application control which popup menu gets automatically posted. The reason can be eitherXmCR_POSTorXmCR_REPOST:XmCR_POSTβ says this is a regular posting request.XmCR_REPOSTβ says the menu was just unposted and that this callback was invoked on a replay.
This callback uses the XmPopupHandlerCallbackStruct structure to pass information along. π¬
XmNshadowThicknessβ the size of the drawn border shadow.XmNtoolTipStringβ theXmStringto display as the toolTip. If this resource isNULL, no tip will be displayed. ToolTips are described inVendorShell(3). β¨XmNtopShadowColorβ the color used to draw the top and left sides of the border shadow. This color is used if theXmNtopShadowPixmapresource is unspecified. Heads up though: if a default top shadow pixmap exists, it needs to be removed forXmNtopShadowColorto actually take effect. πXmNtopShadowPixmapβ the pixmap used to draw the top and left sides of the border shadow. A Primitive top shadow pixmap gets created in two situations. In either of these situations, a default 50-foreground top shadow pixmap is created:- If the Primitive top shadow color is the same as the Core background pixel color.
- If the depth of the screen is only one.
For example, if a widget with the same top shadow and background color is created, a default shadow pixmap is generated. Such a pixmap needs to be removed for the XmNtopShadowColor resource to take effect. π
XmNtraversalOnβ says whether traversal is activated for this widget. InCascadeButtonandCascadeButtonGadget, this resource is forced toTrueunless the parent is anOptionMenu.XmNunitTypeβ provides the basic support for resolution independence. It defines the type of units a widget uses with sizing and positioning resources. If the widget's parent is a subclass ofXmManagerand theXmNunitTyperesource isn't explicitly set, it defaults to the unit type of the parent widget. If the widget's parent is not a subclass ofXmManager, the resource has a default unit type ofXmPIXELS.
The unit type can also be specified in resource files, with this format:
<floating value><unit>
where:
unitis <" ", pixels, inches, centimeters, millimeters, points, font units>pixelsis <pix, pixel, pixels>inchesis <in, inch, inches>centimeteris <cm, centimeter, centimeters>millimetersis <mm, millimeter, millimeters>pointsis <pt, point, points>font unitsis <fu, font_unit, font_units>floatis{"+"|"-"}{{<"0"-"9">*}.}<"0"-"9">*- Note that the type
Dimensionmust always be positive.
- Note that the type
For example,
xmfonts*XmMainWindow.height: 10.4cm
*PostIn.width: 3inches
XmNunitType can have the following values:
XmPIXELSβ all values provided to the widget are treated as normal pixel values.XmMILLIMETERSβ all values provided to the widget are treated as normal millimeter values.Xm100TH_MILLIMETERSβ all values provided to the widget are treated as 1/100 of a millimeter.XmCENTIMETERSβ all values provided to the widget are treated as normal centimeter values.XmINCHESβ all values provided to the widget are treated as normal inch values.Xm1000TH_INCHESβ all values provided to the widget are treated as 1/1000 of an inch.XmPOINTSβ all values provided to the widget are treated as normal point values. A point is a unit used in text processing applications and is defined as 1/72 of an inch.Xm100TH_POINTSβ all values provided to the widget are treated as 1/100 of a point. A point is a unit used in text processing applications and is defined as 1/72 of an inch.XmFONT_UNITSβ all values provided to the widget are treated as normal font units. A font unit has horizontal and vertical components. These are the values of theXmScreenresourcesXmNhorizontalFontUnitandXmNverticalFontUnit.Xm100TH_FONT_UNITSβ all values provided to the widget are treated as 1/100 of a font unit. A font unit has horizontal and vertical components. These are the values of theXmScreenresourcesXmNhorizontalFontUnitandXmNverticalFontUnit.
XmNuserDataβ lets the application attach any specific data it needs to the widget. It's an internally unused resource, so it's just sitting there holding your stuff. π«Ά
β¨ Dynamic Color Defaults β¨
The foreground, background, top shadow, bottom shadow, and highlight color resources are dynamically defaulted. If no color data is specified, the colors are automatically generated. On a single-plane system, a black and white color scheme is generated. Otherwise, four colors are generated, and they display the correct shading for the 3-D visuals. If the background is the only color specified for a widget, the top shadow and bottom shadow colors are generated to give the 3-D appearance. Foreground and highlight colors are generated to provide sufficient contrast with the background color. π
Important, bestie: colors are generated only at creation. Resetting the background throughXtSetValuesdoes not regenerate the other colors.XmChangeColorcan be used to recalculate all associated colors based on a new background color. π
πΈ Inherited Resources πΈ
Primitive inherits behavior and resources from the superclass described in the following table. For a complete description of each resource, refer to the reference page for that superclass. π
π Core Resource Set π
okay bestie, here's the whole resource glow-up menu for this widget. every single one of these is a thing you can set, get, or both β and the access column is literally telling you what you're allowed to do (set it, get it, whatever). i'm giving you all of them, no skips, no "etc." π
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 π
so when the widget hits you back, this is what shows up in your DMs. here's the tea on each callback struct, fr fr.
a pointer to this structure gets passed to every callback for XmNhelpCallback:
typedef struct
{
int reason;
XEvent * event;
} XmAnyCallbackStruct;
reasonβ spills why the callback even got invoked. for this callback,reasonis set toXmCR_HELP.eventβ points at theXEventthat triggered the callback.
and a pointer to this callback structure gets passed to the XmNconvertCallback procedures:
typedef struct
{
int reason;
XEvent *event;
Atom selection;
Atom target;
XtPointer source_data;
XtPointer location_data;
int flags;
XtPointer parm;
int parm_format;
unsigned long parm_length;
Atom parm_type;
int status;
XtPointer value;
Atom type;
int format;
unsigned long length;
} XmConvertCallbackStruct;
reasonβ tells you why the callback was invoked.eventβ points at theXEventthat triggered the callback. heads up: it can beNULL.selectionβ says which selection the conversion is being requested for. possible values areCLIPBOARD,PRIMARY,SECONDARY, and_MOTIF_DROP.
okay so the callback struct fields keep going like this, bestie:
targetβ says what the conversion target is. πsource_dataβ has the tea on the selection source. When the selection is_MOTIF_DROP,source_datais theDragContext. Otherwise, itβsNULL. π«Άlocation_dataβ has info about where the data to be converted lives. If the value isNULL, the data to be transferred is the widgetβs current selection. Otherwise, the type and interpretation of the value are specific to the widget class. π¦flagsβ tells you the status of the conversion. Possible values are:XmCONVERTING_NONEβ this flag is currently unused. πXmCONVERTING_PARTIALβ the target widget was able to be converted, but some data was lost. πXmCONVERTING_SAMEβ the conversion target is the source of the data to be transferred. π₯XmCONVERTING_TRANSACTβ this flag is currently unused. π
parmβ contains parameter data for this target. If no parameter data exists, the value isNULL. When selection isCLIPBOARDand target is_MOTIF_CLIPBOARD_TARGETSor_MOTIF_DEFERRED_CLIPBOARD_TARGETS, the value is the requested operation (XmCOPY,XmMOVE, orXmLINK). πparm_formatβ says whether the data inparmshould be viewed as a list ofchar,short, orlongquantities. Possible values are0(whenparmisNULL),8(when the data inparmshould be viewed as a list of chars),16(when the data inparmshould be viewed as a list of shorts), or32(when the data inparmshould be viewed as a list of longs). Note thatparm_formatsymbolizes a data type, not the number of bits in each list element. For example, on some machines, aparm_formatof32means that the data inparmshould be viewed as a list of 64-bit quantities, not 32-bit quantities. π€―parm_lengthβ specifies the number of elements of data inparm, where each element has the size specified byparm_format. WhenparmisNULL, the value is0. β¨parm_typeβ specifies the parameter type ofparm. πΈstatusβ an IN/OUT member that specifies the status of the conversion. The initial value isXmCONVERT_DEFAULT. The callback procedure can set this member to one of these values:XmCONVERT_DEFAULTβ this value means that the widget class conversion procedure, if any, is called after the callback procedures return. If the widget class conversion procedure produces any data, it overwrites the data provided by the callback procedures in thevaluemember. πXmCONVERT_MERGEβ this value means that the widget class conversion procedure, if any, is called after the callback procedures return. If the widget class conversion procedure produces any data, it appends its data to the data provided by the callback procedures in thevaluemember. This value is intended for use with targets that result in lists of data, such asTARGETS. πXmCONVERT_DONEβ this value means that the callback procedure has successfully finished the conversion. The widget class conversion procedure, if any, is not called after the callback procedures return. βXmCONVERT_REFUSEβ this value means that the callback procedure has terminated the conversion process without completing the requested conversion. The widget class conversion procedure, if any, is not called after the callback procedures return. π«
valueβ an IN/OUT parameter that contains any data that the callback procedure produces as a result of the conversion. The initial value isNULL. If the callback procedure sets this member, it must ensure that thetype,format, andlengthmembers correspond to the data invalue. The callback procedure is responsible for allocating memory when it sets this member. The toolkit frees this memory when it is no longer needed. π§typeβ an IN/OUT parameter that indicates the type of the data in thevaluemember. The initial value isINTEGER. π’formatβ an IN/OUT parameter that specifies whether the data invalueshould be viewed as a list ofchar,short, orlongquantities. The initial value is8. The callback procedure can set this member to8(for a list of char),16(for a list of short), or32(for a list of long). πlengthβ an IN/OUT member that specifies the number of elements of data invalue, where each element has the size symbolized byformat. The initial value is0. π
A pointer to the following structure is passed to each callback for XmNpopupHandlerCallback:
typedef struct
{
int reason;
XEvent * event;
Widget menuToPost;
Boolean postIt;
Widget target;
} XmPopupHandlerCallbackStruct;
reasonβ indicates why the callback was invoked. π€eventβ points to theXEventthat triggered the handler. π―menuToPostβ specifies the popup menu that the menu system believes should be posted. The application may modify this field. πpostItβ indicates whether the posting process should continue. The application may modify this field. πtargetβ specifies the most specific widget or gadget that the menu sytem found from the event that matches the event. π
β¨ Translations β¨
The XmPrimitive translations are listed below. π
Note that for buttons in menus, altering translations in #override or #augment mode is undefined. β οΈ
The following key names are listed in the X standard key event translation table syntax. This format is the one used by Motif to specify the widget actions corresponding to a given key. A brief overview of the format is provided under VirtualBindings(3). For a complete description of the format, please refer to the X Toolkit Intrinsics Documentation. π
:<Key><osfActivate>:βPrimitiveParentActivate():<Key><osfCancel>:βPrimitiveParentCancel():<Key><osfBeginLine>:βPrimitiveTraverseHome():<Key><osfUp>:βPrimitiveTraverseUp():<Key><osfDown>:βPrimitiveTraverseDown():<Key><osfLeft>:βPrimitiveTraverseLeft():<Key><osfRight>:βPrimitiveTraverseRight()βΌs βΌm βΌa <Key>Return:βPrimitiveParentActivate()s βΌm βΌa <Key>Tab:βPrimitivePrevTabGroup()βΌm βΌa <Key>Tab:βPrimitiveNextTabGroup()<Key><osfHelp>:βPrimitiveHelp()
π Action Routines π
The XmPrimitive action routines are:
PrimitiveHelp()β Calls the callbacks forXmNhelpCallbackif any exist. If there are no help callbacks for this widget, this action calls the help callbacks for the nearest ancestor that has them. πPrimitiveNextTabGroup()β This action depends on the value of the Display resourceXmNenableButtonTab. WhenXmNenableButtonTabisFalse(default), this action traverses to the first item in the next tab group. If the current tab group is the last entry in the tab group list, it wraps to the beginning of the tab group list. WhenXmNenableButtonTabisTrue, this action moves to the next item within the current tab group, unless it is the last item in the tab group. When the item is the last in the group, the action traverses to the first item in the next tab group. TheXmNenableButtonTabbehavior applies only toPushButton,ArrowButton, andDrawnArrow. πPrimitiveParentActivate()β If the parent is a manager, passes theKActivateevent received by the widget to the parent. β¬οΈPrimitiveParentCancel()β If the parent is a manager, passes theKCancelevent received by the widget to the parent. β¬οΈPrimitivePrevTabGroup()β This action depends on the value of the Display resourceXmNenableButtonTab. WhenXmNenableButtonTabisFalse(default), this action traverses to the first item in the previous tab group. If the beginning of the tab group list is reached, it wraps to the end of the tab group list. WhenXmNenableButtonTabisTrue, this action moves to the previous item within the current tab group unless it is the first item in the tab group. When the item is the first in the group, the action traverses to the first item in the previous tab group. TheXmNenableButtonTabbehavior applies onlyPushButton,ArrowButton, andDrawnButton. πPrimitiveTraverseDown()β Traverses to the next item below the current widget in the current tab group, wrapping if necessary. The wrapping direction depends on the layout direction of the widget tab group. πPrimitiveTraverseHome()β Traverses to the first widget or gadget in the current tab group. πPrimitiveTraverseLeft()β Traverses to the next item to the left of the current widget in the current tab group, wrapping if necessary. The wrapping direction depends on the layout direction of the widget tab group. πPrimitiveTraverseNext()β Traverses to the next item in the current tab group, wrapping if necessary. The wrapping direction depends on the layout direction of the widget tab group. β‘οΈPrimitiveTraversePrev()β Traverses to the previous item in the current tab group, wrapping if necessary. The wrapping direction depends on the layout direction of the widget tab group. β¬ οΈPrimitiveTraverseRight()β Traverses to the next item to the right of the current gadget in the current tab group, wrapping if necessary. The wrapping direction depends on the layout direction of the widget tab group. πPrimitiveTraverseUp()β hops to the next item above the current gadget in the current tab group, wrapping around if it has to. And which way it wraps? That depends on the layout direction of the widget tab group, bestie. So it's giving "up and over" energy, not "up and out". π
β¨ Additional Behavior β¨
This widget also has some extra behavior, and honestly? It's lowkey doing the most:
<FocusIn>β if the shell's keyboard focus policy isXmEXPLICIT, it highlights the widget and gives it the focus. Main character moment: it's lit up AND it's the center of attention. β¨<FocusOut>β if the shell's keyboard focus policy isXmEXPLICIT, it unhighlights the widget and removes the focus. Not me losing the spotlight... it's fine, it's fine. π
Heads up: both of these only kick in when the focus policy is XmEXPLICIT. Under any other policy, this whole section is just vibing in the background. π
π Virtual Bindings π
Okay so the bindings for virtual keys? Vendor specific, bestie. Every vendor does its own thing β no universal rules, no group chat consensus, nothing. π«Ά
If you want the actual tea on bindings for virtual buttons and keys, go read VirtualBindings(3). That's the source. Iykyk. π
π RELATED π
The little friend group this page rolls with:
And that's a wrap on the whole page, periodt. π This one lives in the <rainbow>XmPrimitive(library call)</rainbow> corner of the docs, with its lil date stamp chillin' in the footer right next to it β you know the one. Go forth and traverse, queen. ππ¦
π¦ where this page comes from
- 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