XMDIALOGSHELL(3)
XmDialogShell ๐
okay bestie, welcome to the library call corner of the manual, where we're gonna talk about XmDialogShell โ aka The DialogShell widget class. she's iconic, she's a Shell, she's the whole vibe. let's get into it โจ
โจ SYNOPSIS โจ
#include <Xm/DialogS.h>
that's it. that's the whole incantation. go off ๐
๐ธ DESCRIPTION ๐ธ
so like, modal and modeless dialogs use DialogShell as the Shell parent. that's her job, that's her moment, she ate.
here's the tea tho: DialogShell widgets cannot be iconified. nope. not a thing. instead, all secondary DialogShell widgets that are associated with an ApplicationShell widget get iconified and de-iconified as a group together with the primary widget. squad goals fr fr ๐
the client indirectly manipulates DialogShell through the convenience interfaces during creation, and it can directly manipulate its BulletinBoard-derived child. and here's the thing โ much of DialogShell's functionality assumes its child is a BulletinBoard subclass, though she can potentially stand alone. she's flexible like that. lowkey independent. main character energy ๐
setting XmNheight, XmNwidth, or XmNborderWidth for either a DialogShell or its managed child usually sets that resource to the same value in both the parent and the child. cute, matching. ๐ซถ
but โ when an off-the-spot input method exists, the height and width of the shell may be greater than those of the managed child, in order to accommodate the input method. in that case:
- setting
XmNheightorXmNwidthfor the shell does not necessarily set that resource to the same value in the managed child, and - setting
XmNheightorXmNwidthfor the child does not necessarily set that resource to the same value in the shell.
so yeah, they stop twinning. it's giving "we're not the same person anymore" ๐ญ
now for the managed child of a DialogShell โ regardless of the value of the shell's XmNallowShellResize resource, setting XmNx or XmNy sets the corresponding resource of the parent but does not change the child's position relative to the parent. and the XtGetValues resource for the child's XmNx or XmNy yields the value of the corresponding resource in the parent. the x and y-coordinates of the child's upper left outside corner relative to the parent's upper left inside corner are both 0 (zero) minus the value of XmNborderWidth. math is mathing, don't question it ๐งฎ
โ ๏ธ heads up bestie: note that the Inter-Client Communication Conventions Manual (ICCCM) allows a window manager to change or control the border width of a reparented top-level window. so your border width is not entirely your own. the WM has opinions. let her cook. ๐
DialogShell uses the XmQTdialogShellSavvy trait. slay, trait acquired โจ
๐ฆ Classes ๐ฆ
DialogShell inherits behavior, resources, and traits from the Core, Composite, Shell, WMShell, VendorShell, and TransientShell classes. whole family tree, all of them showing up to the function. ๐
- the class pointer is
xmDialogShellWidgetClass - the class name is
XmDialogShell
write those down, you'll need 'em. no cap ๐
๐ New Resources ๐
plot twist: DialogShell defines no new resources but she does override the XmNdeleteResponse resource in the VendorShell class. so not new-new, just... improved. a glow up, if you will. ๐
๐ Inherited Resources ๐
DialogShell inherits behavior and resources from the superclasses described in the following tables, which define sets of widget resources used by the programmer to specify data. (yes, tables. plural. she's thorough.)
for a complete description of each resource, go read the reference page for that superclass. the programmer can also set the resource values for the inherited classes to set attributes for this widget.
now, the .Xdefaults naming rules, listen up because this part is important:
- to reference a resource by name or by class in a
.Xdefaultsfile, remove theXmNorXmCprefix and use the remaining letters - to specify one of the defined values for a resource in a
.Xdefaultsfile, remove theXmprefix and use the remaining letters (in either lowercase or uppercase, but include any underscores between words)
and the codes in the access column? they tell you if the given resource can be:
- set at creation time โ
C - set by using
XtSetValuesโS - retrieved by using
XtGetValuesโG - not applicable โ
N/A
โญ TransientShell Resource Set โญ
one resource. one. but she's important:
XmNtransientForโ class:XmCTransientFor, type:Widget, default:NULL, access:CSG๐
and that's the first chunk bestie, but we are not done โ there's more of this page coming, so stay tuned ๐
๐ซ VendorShell Resource Set ๐ซ
okay bestie, here's the full resource menu for VendorShell โ every XmN name, its class, its type, its default, and its access code, all of it, zero skips, no cap ๐ซถ. Think of it like the group chat roster: name first, then the whole vibe of who they are.
XmNaudibleWarningโ classXmCAudibleWarning, typeunsigned char, defaultXmBELL, accessCSG. it's the "should this thing make noise at me" switch, and yeah, the default is literally to beep at you ๐XmNbuttonFontListโ classXmCButtonFontList, typeXmFontList, defaultdynamic, accessCSG. the fonts for your buttons, and the default isdynamicbecause it flexes based on your setup ๐XmNbuttonRenderTableโ classXmCButtonRenderTable, typeXmRenderTable, defaultdynamic, accessCSG. same energy as above but for the render table, which is the fancier, more main-character version of a font list โจXmNdefaultFontListโ classXmCDefaultFontList, typeXmFontList, defaultdynamic, accessCG. the fallback font list, the one that shows up when nobody else got assigned a job ๐XmNdeleteResponseโ classXmCDeleteResponse, typeunsigned char, defaultXmUNMAP, accessCSG. what happens when you try to close the thing, and by default it just unmaps, it does not yeet itself out of existence ๐ญXmNinputMethodโ classXmCInputMethod, typeString, defaultNULL, accessCSG. the input method string, and it defaults toNULL, so no input method assigned unless you say so ๐XmNinputPolicyโ classXmCInputPolicy, typeXmInputPolicy, defaultXmPER_SHELL, accessCSG. how input gets routed, and the default is per-shell, one policy per shell, periodt ๐XmNkeyboardFocusPolicyโ classXmCKeyboardFocusPolicy, typeunsigned char, defaultXmEXPLICIT, accessCSG. who gets the keyboard spotlight, and by default it'sXmEXPLICIT, meaning you point at it, it doesn't just assume โญXmNlabelFontListโ classXmCLabelFontList, typeXmFontList, defaultdynamic, accessCSG. fonts for your labels,dynamicby default, obviously ๐XmNlabelRenderTableโ classXmCLabelRenderTabel, typeXmRenderTable, defaultdynamic, accessCSG. and yes bestie, the class is writtenXmCLabelRenderTabel, that's genuinely how it is, we don't question it, we just copy it exactly ๐XmNlayoutDirectionโ classXmCLayoutDirection, typeXmDirection, defaultXmLEFT_TO_RIGHT, accessCG. which way the layout flows, and the default is left to right, the classic ๐ธXmNmwmDecorationsโ classXmCMwmDecorations, typeint, default-1, accessCG. window manager decorations, default-1, which is the "I'm not telling you anything, let the WM handle it" value ๐ชXmNmwmFunctionsโ classXmCMwmFunctions, typeint, default-1, accessCG. the MWM functions, also-1by default, same hands-off energy ๐ฅXmNmwmInputModeโ classXmCMwmInputMode, typeint, default-1, accessCG. the MWM input mode, and you already know: default-1๐XmNmwmMenuโ classXmCMwmMenu, typeString, defaultNULL, accessCG. a string for the MWM menu, defaulting toNULL, i.e. no menu, nothing to see here ๐XmNpreeditTypeโ classXmCPreeditType, typeString, defaultdynamic, accessCSG. the preedit type for input,dynamicby default because of course it is ๐งXmNshellUnitTypeโ classXmCShellUnitType, typeunsigned char, defaultXmPIXELS, accessCSG. the units for the shell, defaulting toXmPIXELS, so we're measuring in pixels, iconic ๐XmNtextFontListโ classXmCTextFontList, typeXmFontList, defaultdynamic, accessCSG. fonts for your text widgets,dynamicas always bestie ๐XmNtextRenderTableโ classXmCTextRenderTable, typeXmRenderTable, defaultdynamic, accessCSG. the render table for text, and yep, defaultdynamicโจXmNunitTypeโ classXmCUnitType, typeunsigned char, defaultXmPIXELS, accessCSG. the general unit type,XmPIXELSby default, keeping it consistent with the shell one ๐XmNuseAsyncGeometryโ classXmCUseAsyncGeometry, typeBoolean, defaultFalse, accessCSG. whether to use async geometry, and the default isFalse, so no async shenanigans unless you ask for them ๐ โโ๏ธ
and that's the whole roster, every single one, nobody left out ๐ซถ
okay so this next bit is the WMShell resource set, and it's a whole grid in the original โ columns for Name, Class, Type, Default and Access. We're gonna walk every single row, no skipping, because bestie you know I don't skip rows. ๐
Every one of these has an access of CSG, so if you see it at the end of each line, that's the access column doing its thing. โจ
XmNbaseHeightโ classXmCBaseHeight, typeint, defaultXtUnspecifiedShellInt, accessCSG๐ฆXmNbaseWidthโ classXmCBaseWidth, typeint, defaultXtUnspecifiedShellInt, accessCSG๐ฆXmNheightIncโ classXmCHeightInc, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNiconMaskโ classXmCIconMask, typePixmap, defaultNULL, accessCSG๐XmNiconPixmapโ classXmCIconPixmap, typePixmap, defaultNULL, accessCSG๐XmNiconWindowโ classXmCIconWindow, typeWindow, defaultNULL, accessCSG๐ชXmNiconXโ classXmCIconX, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNiconYโ classXmCIconY, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNinitialStateโ classXmCInitialState, typeint, defaultNormalState, accessCSG๐XmNinputโ classXmCInput, typeBoolean, defaultTrue, accessCSG๐ซถXmNmaxAspectXโ classXmCMaxAspectX, typeint, defaultXtUnspecifiedShellInt, accessCSGโจXmNmaxAspectYโ classXmCMaxAspectY, typeint, defaultXtUnspecifiedShellInt, accessCSGโจXmNmaxHeightโ classXmCMaxHeight, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNmaxWidthโ classXmCMaxWidth, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNminAspectXโ classXmCMinAspectX, typeint, defaultXtUnspecifiedShellInt, accessCSGโจXmNminAspectYโ classXmCMinAspectY, typeint, defaultXtUnspecifiedShellInt, accessCSGโจXmNminHeightโ classXmCMinHeight, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNminWidthโ classXmCMinWidth, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNtitleโ classXmCTitle, typeString, defaultdynamic, accessCSG๐XmNtitleEncodingโ classXmCTitleEncoding, typeAtom, defaultdynamic, accessCSG๐XmNtransientโ classXmCTransient, typeBoolean, defaultTrue, accessCSG๐งXmNwaitForWmโ classXmCWaitForWm, typeBoolean, defaultTrue, accessCSGโณXmNwidthIncโ classXmCWidthInc, typeint, defaultXtUnspecifiedShellInt, accessCSG๐XmNwindowGroupโ classXmCWindowGroup, typeWindow, defaultdynamic, accessCSG๐ซXmNwinGravityโ classXmCWinGravity, typeint, defaultdynamic, accessCSG๐XmNwmTimeoutโ classXmCWmTimeout, typeint, default5000 ms, accessCSGโฐ
and now the part that actually matters, the one you'd lowkey get burned by if you skimmed, so eyes on me bestie:
Note: ๐จ If values forXmNminWidthandXmNminHeightare present, and values forXmNbaseWidthandXmNbaseHeightare absent,XmNminWidthandXmNminHeightwill be used as default values forXmNbaseWidthandXmNbaseHeight, and these values will be added to the shell size specified by the user. To work around this, add arguments during widget creation to explicitly setXmNbaseWidthandXmNbaseHeightto zero.
like, okay, that's a sneaky one. not me being dramatic, it's literally in the docs. ๐ข
and we're not done yet, there's more coming so stay with me ๐
๐ธ Shell Resource Set ๐ธ
okay bestie, these are the resources the Shell widget brings to the table โ every single one, no skips ๐
XmNallowShellResizeโ classXmCAllowShellResize, typeBoolean, defaultFalse, accessCGXmNcreatePopupChildProcโ classXmCCreatePopupChildProc, typeXtCreatePopupChildProc, defaultNULL, accessCSGXmNgeometryโ classXmCGeometry, typeString, defaultNULL, accessCSGXmNoverrideRedirectโ classXmCOverrideRedirect, typeBoolean, defaultFalse, accessCSGXmNpopdownCallbackโ classXmCCallback, typeXtCallbackList, defaultNULL, accessCXmNpopupCallbackโ classXmCCallback, typeXtCallbackList, defaultNULL, accessCXmNsaveUnderโ classXmCSaveUnder, typeBoolean, defaultTrue, accessCSGXmNvisualโ classXmCVisual, typeVisual *, defaultCopyFromParent, accessCSG
๐ฆ Composite Resource Set ๐ฆ
and these are the ones the Composite widget is serving โ the whole roster, periodt โจ
XmNchildrenโ classXmCReadOnly, typeWidgetList, defaultNULL, accessGXmNinsertPositionโ classXmCInsertPosition, typeXtOrderProc, defaultNULL, accessCSGXmNnumChildrenโ classXmCReadOnly, typeCardinal, default0, accessG
Okay bestie, here's the Core Resource Set โ every single one, no skips, no shortcuts. ๐
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
That's the whole roster, bestie, all nineteen of them, untouched and unbothered. ๐
โจ Translations โจ
Okay so here's the gag: there are no translations for XmDialogShell. Like, none. Zero. The vibes are purely structural. ๐
๐ฆ RELATED ๐ฆ
The friend group, assembled:
And that's the whole page, bestie โ we made it to the end. ๐ซถ This one's filed under XmDialogShell(library call), so if you ever need to cite it in your ~sources~ that's the name to drop. Now go forth and dialog-shell responsibly. Mwah. ๐
โจ
๐ฆ 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