XMPANEDWINDOW(3)

πŸ“¦
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

πŸ’… XmPanedWindow πŸ’…

okay bestie, this is the manual page for XmPanedWindow(library call) β€” the PanedWindow widget class. it's giving composite widget, constraint energy, and sashes. no cap. ✨


✨ NAME ✨

XmPanedWindow β€” The PanedWindow widget class

πŸŽ€ SYNOPSIS πŸŽ€

#include <Xm/PanedW.h>

🌸 DESCRIPTION 🌸

PanedWindow is a composite widget that lays out its children in a vertically tiled format. Children show up top-to-bottom: the first child inserted is at the top of the PanedWindow, and the last child inserted is at the bottom. The PanedWindow grows to match the width of its widest child, and all the other children are forced to that same width. The height of the PanedWindow is equal to the sum of the heights of all its children, the spacing between them, and the size of the top and bottom margins. math but make it layout ✨

The user can also adjust the size of the panes. To make that happen, a pane control sash is created for most children. The sash appears as a square box positioned on the bottom of the pane that it controls. The user can adjust the size of a pane by using the mouse or keyboard. drag and drop but vintage πŸ’…

The PanedWindow is also a constraint widget, which means it creates and manages a set of constraints for each child. You can specify a minimum and maximum size for each pane. The PanedWindow does not allow a pane to be resized below its minimum size or beyond its maximum size. Also, when the minimum size of a pane is equal to its maximum size, no control sash is presented for that pane or for the lowest pane. respect the limits, bestie

The default XmNinsertPosition procedure for PanedWindow causes all panes to appear first in the XmNchildren list, and all sashes to appear after the panes. For a pane child, it returns the value of XmNpositionIndex if one has been specified for the child. Otherwise, it returns the number of panes in the PanedWindow's XmNchildren list. Other than the fact that all sashes appear after all panes, the insertion order of sashes is unspecified. This procedure also causes nonsash widgets to be inserted after other nonsash children but before any sashes. The behavior of PanedWindow is undefined if XmNinsertPosition is set to a procedure other than the default.

🚨 undefined behavior alert: setting XmNinsertPosition to anything other than the default procedure? PanedWindow is not okay with that. periodt. πŸ’€

All panes and sashes in a PanedWindow must be tab groups. When a pane is inserted as a child of the PanedWindow, if the pane's XmNnavigationType is not XmEXCLUSIVE_TAB_GROUP, PanedWindow sets it to XmSTICKY_TAB_GROUP. keyboard navigation stays iconic


πŸ¦‹ Descendants πŸ¦‹

PanedWindow automatically creates for each paned window the descendants shown in the following table. An application can use XtName and the child list information to gain access to the named descendant. In addition, a user or an application can use the named descendant when specifying resource values. iykyk, named descendants are the plug

  • Named Descendant: Sash β€” Class: subclass of XmPrimitive β€” Identity: sash
  • Named Descendant: Separator β€” Class: XmSeparatorGadget β€” Identity: dividing line between window panes

πŸ‘‘ Classes πŸ‘‘

PanedWindow inherits behavior and resources from the Core, Composite, Constraint, and XmManager classes. royalty inherits from royalty

The class pointer is xmPanedWindowWidgetClass.

The class name is XmPanedWindow.


✨ 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). .Xdefaults girlies, this one's for you

  • XmNmarginHeight β€” Class: XmCMarginHeight, Type: Dimension, Default: 3, Access: CSG
  • XmNmarginWidth β€” Class: XmCMarginWidth, Type: Dimension, Default: 3, Access: CSG
  • XmNorientation β€” Class: XmCOrientation, Type: unsigned char, Default: XmVERTICAL, Access: CSG
  • XmNrefigureMode β€” Class: XmCBoolean, Type: Boolean, Default: True, Access: CSG
  • XmNsashHeight β€” Class: XmCSashHeight, Type: Dimension, Default: 10, Access: CSG
  • XmNsashIndent β€” Class: XmCSashIndent, Type: Position, Default: -10, Access: CSG
  • XmNsashShadowThickness β€” Class: XmCShadowThickness, Type: Dimension, Default: dynamic, Access: CSG
  • XmNsashWidth β€” Class: XmCSashWidth, Type: Dimension, Default: 10, Access: CSG
  • XmNseparatorOn β€” Class: XmCSeparatorOn, Type: Boolean, Default: True, Access: CSG
  • XmNspacing β€” Class: XmCSpacing, Type: Dimension, Default: 8, Access: CSG
  • XmNmarginHeight β€” Specifies the distance between the top and bottom edges of the PanedWindow and its children. personal space for the top and bottom
  • XmNmarginWidth β€” Specifies the distance between the left and right edges of the PanedWindow and its children. personal space for the sides
  • XmNorientation β€” Specifies the layout as either vertical (with the XmVERTICAL value) or horizontal (with the XmHORIZONTAL value). In the vertical layout, the children are laid out in a vertically tiled format. In the horizontal layout, the children are laid out in a horizontal layout, with the sash moveable along the horizontal axis. choose your axis, bestie
  • XmNrefigureMode β€” Determines whether the panes' positions are recomputed and repositioned when programmatic changes are being made to the PanedWindow. Setting this resource to True resets the children to their appropriate positions. True = snap back into place
  • XmNsashHeight β€” Specifies the height of the sash. how tall is that lil handle
  • XmNsashIndent β€” this one decides where the sash sits horizontally along each pane, and honestly the sign thing is so real. A positive value pushes the sash away from the near (left) side of the PanedWindow, and a negative value pulls it toward the far (right) side. And if your offset is bigger than the PanedWindow's width minus the sash's width? Bestie, the sash just gets placed flush against the near side. That's it, that's the rule. πŸ’…

Also, whether "near" actually means the left or the right side of the PanedWindow depends on the widget's XmNlayoutDirection resource. So like… read the room first, okay? πŸ¦‹

  • XmNsashShadowThickness β€” sets the thickness of the shadows on the sashes. ✨
  • XmNsashWidth β€” sets the width of the sash. Simple, iconic, no notes. πŸŽ€
  • XmNseparatorOn β€” controls whether a separator gets created between each of the panes. Set this resource to True and boom, a Separator appears at the midpoint between each of the panes. 🌸
  • XmNspacing β€” the distance between each child pane. Personal space matters, fr fr. πŸ’–

πŸ’œ XmPanedWindow Constraint Resource Set πŸ’œ

okay so these are the constraint resources, meaning they live on the children, not on the PanedWindow itself. Every single one, right here, no skips:

  • XmNallowResize β€” class XmCBoolean, type Boolean, default False, access CSG
  • XmNpaneMaximum β€” class XmCPaneMaximum, type Dimension, default 1000, access CSG
  • XmNpaneMinimum β€” class XmCPaneMinimum, type Dimension, default 1, access CSG
  • XmNpositionIndex β€” class XmCPositionIndex, type short, default XmLAST_POSITION, access CSG
  • XmNskipAdjust β€” class XmCBoolean, type Boolean, default False, access CSG

  • XmNallowResize β€” lets an application say whether the PanedWindow should let a pane request to be resized. Important: this flag only does anything after the PanedWindow and its children have been realized. Set it to True and the PanedWindow tries to honor requests to alter the height of the pane. Set it to False and it always denies pane requests to resize. Always. No negotiation. 😭
  • XmNpaneMaximum β€” lets an application set the maximum size a pane can be resized to. Heads up: this value must be greater than the specified minimum. That's not a suggestion, that's the law. ⚠️
  • XmNpaneMinimum β€” lets an application set the minimum size a pane can be resized to. And this value must be greater than 0 (zero). Zero is not it, bestie. 🚫
  • XmNpositionIndex β€” specifies the position of the widget in its parent's list of children (that's the list of pane children, not including sashes). The value is an integer that is no less than 0 (zero) and no greater than the number of children in the list at the time the value is specified. A value of 0 means the child goes at the beginning of the list. You can also specify XmLAST_POSITION (which is the default), and that means the child gets placed at the end of the list. Any other value is just ignored, sorry babe. πŸ™ˆ And XtGetValues returns the position of the widget in its parent's child list at the time of the call to XtGetValues.

Now the mechanics, because this part is lowkey a whole situation. When a widget is inserted into its parent's child list, the positions of any existing children that are greater than or equal to the specified widget's XmNpositionIndex are increased by 1.

And the effect of a call to XtSetValues for XmNpositionIndex is to:

  1. remove the specified widget from its parent's child list,
  2. decrease by one the positions of any existing children that are greater than the specified widget's former position in the list, and then
  3. insert the specified widget into its parent's child list as described in the preceding sentence.

Yes it's giving choreography. Yes it's necessary. πŸ’ƒ

  • XmNskipAdjust β€” when set to True, this Boolean resource lets an application specify that the PanedWindow should not automatically resize this pane. Let it breathe. 🧘

🌈 Inherited Resources 🌈

PanedWindow 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. iykyk, always check the parent's docs before you come for mine. πŸ‘‘

πŸ‘‘ XmManager Resource Set πŸ‘‘

okay bestie, before we get to the ✨main character✨ resources that XmPanedWindow brings to the party, you gotta meet the ones it inherits from its parent class, XmManager. These are lowkey the whole vibe of every manager widget, so lock in πŸ”₯

For each one I'm giving you the name, its class, its type, its default, and its access code β€” exactly as the source says it, no cap:

  • XmNbottomShadowColor β€” class XmCBottomShadowColor, type Pixel, default dynamic, access CSG πŸ’…
  • XmNbottomShadowPixmap β€” class XmCBottomShadowPixmap, type Pixmap, default XmUNSPECIFIED_PIXMAP, access CSG
  • XmNforeground β€” class XmCForeground, type Pixel, default dynamic, access CSG
  • XmNhelpCallback β€” class XmCCallback, type XtCallbackList, default NULL, access C 🫢
  • XmNhighlightColor β€” class XmCHighlightColor, type Pixel, default dynamic, access CSG
  • XmNhighlightPixmap β€” class XmCHighlightPixmap, type Pixmap, default dynamic, access CSG
  • XmNinitialFocus β€” class XmCInitialFocus, type Widget, default NULL, access CSG
  • XmNlayoutDirection β€” class XmCLayoutDirection, type XmDirection, default dynamic, access CG 🌈
  • XmNnavigationType β€” class XmCNavigationType, type XmNavigationType, default XmTAB_GROUP, access CSG
  • XmNpopupHandlerCallback β€” class XmCCallback, type XtCallbackList, default NULL, access C
  • XmNshadowThickness β€” class XmCShadowThickness, type Dimension, default 2, access CSG ✨
  • XmNstringDirection β€” class XmCStringDirection, type XmStringDirection, default dynamic, access CG
  • XmNtopShadowColor β€” class XmCTopShadowColor, type Pixel, default dynamic, access CSG
  • XmNtopShadowPixmap β€” class XmCTopShadowPixmap, type Pixmap, default dynamic, access CSG
  • XmNtraversalOn β€” class XmCTraversalOn, type Boolean, default True, access CSG
  • XmNunitType β€” class XmCUnitType, type unsigned char, default dynamic, access CSG
  • XmNuserData β€” class XmCUserData, type XtPointer, default NULL, access CSG πŸ’–

that's the whole inherited set, bestie β€” every last one of them, in order, nothing skipped πŸ™ˆ and yeah, a bunch of those defaults literally just say dynamic, which is exactly what the page says, so don't come for me, I'm just the messenger πŸŽ€

heads up: this is the XmManager set, so it applies to XmPanedWindow through inheritance β€” that's not me guessing, that's the whole reason this table is sitting in this manpage πŸ’€

and wait, there's more coming, so don't go anywhere 🌸

okay so this next chunk is the Core Resource Set β€” every single resource with its class, type, default, and access level. I'm putting it in bullet form so your eyes don't glaze over, bestie πŸ’…

  • XmNaccelerators β€” class XmCAccelerators, type XtAccelerators, default dynamic, access CSG. it's giving shortcut energy, periodt ✨
  • XmNancestorSensitive β€” class XmCSensitive, type Boolean, default dynamic, access G. lowkey iconic πŸ¦‹
  • XmNbackground β€” class XmCBackground, type Pixel, default dynamic, access CSG. main character background vibes πŸŽ€
  • XmNbackgroundPixmap β€” class XmCPixmap, type Pixmap, default XmUNSPECIFIED_PIXMAP, access CSG. not me obsessing over this one πŸ’–
  • XmNborderColor β€” class XmCBorderColor, type Pixel, default XtDefaultForeground, access CSG. slay that border aesthetic πŸ’…
  • XmNborderPixmap β€” class XmCPixmap, type Pixmap, default XmUNSPECIFIED_PIXMAP, access CSG. the way that pixmap is unspecified… iykyk 🌸
  • XmNborderWidth β€” class XmCBorderWidth, type Dimension, default 0, access CSG. zero width, zero problems, no cap 🫢
  • XmNcolormap β€” class XmCColormap, type Colormap, default dynamic, access CG. it's giving color, literally 🌈
  • XmNdepth β€” class XmCDepth, type int, default dynamic, access CG. deep, fr fr πŸ’€
  • XmNdestroyCallback β€” class XmCCallback, type XtCallbackList, default NULL, access C. bye bestie, callback time 😭
  • XmNheight β€” class XmCHeight, type Dimension, default dynamic, access CSG. tall queen behavior πŸ‘‘
  • XmNinitialResourcesPersistent β€” class XmCInitialResourcesPersistent, type Boolean, default True, access C. persistent? we love that for her πŸ’œ
  • XmNmappedWhenManaged β€” class XmCMappedWhenManaged, type Boolean, default True, access CSG. mapped and managed, the dream ✨
  • XmNscreen β€” class XmCScreen, type Screen *, default dynamic, access CG. big screen energy, periodt 🎬
  • XmNsensitive β€” class XmCSensitive, type Boolean, default True, access CSG. sensitive but make it iconic πŸ₯Ί
  • XmNtranslations β€” class XmCTranslations, type XtTranslations, default dynamic, access CSG. the way that translations hit different πŸ’…
  • XmNwidth β€” class XmCWidth, type Dimension, default dynamic, access CSG. wide leg jeans but for widgets 🌈
  • XmNx β€” class XmCPosition, type Position, default 0, access CSG. x marks the spot, no cap ⭐
  • XmNy β€” class XmCPosition, type Position, default 0, access CSG. y tho? because position, bestie πŸ’–

and that's the core set, but there's more coming, so don't go anywhere 🫢

Okay so here's the resource table, bestie β€” every single row, no cap. The columns are Name, Class, Type, Default, and Access, with Composite and Resource Set floating around in the header like they own the place. πŸ’…

  • XmNchildren β€” Class: XmCReadOnly; Type: WidgetList; Default: NULL; Access: G
  • XmNinsertPosition β€” Class: XmCInsertPosition; Type: XtOrderProc; Default: default procedure; Access: CSG
  • XmNnumChildren β€” Class: XmCReadOnly; Type: Cardinal; Default: 0; Access: G

Translations ✨

XmPanedWindow inherits translations from XmManager.

The translations for sashes within the PanedWindow are described in the following table. The key names below use the X standard key event translation table syntax β€” that's the format Motif uses to say which widget actions go with a given key. There's a quick overview under VirtualBindings(3), and for the full format, please refer to the X Toolkit Instrinsics Documentation.

  • ∼c ∼s ∼m ∼a <Btn1Down>: SashAction(Start)
  • ∼c ∼s ∼m ∼a <Btn1Motion>: SashAction(Move)
  • ∼c ∼s ∼m ∼a <Btn1Up>: SashAction(Commit)
  • ∼c ∼s ∼m ∼a <Btn2Down>: SashAction(Start)
  • ∼c ∼s ∼m ∼a <Btn2Motion>: SashAction(Move)
  • ∼c ∼s ∼m ∼a <Btn2Up>: SashAction(Commit)
  • :<Key><osfActivate>: PrimitiveParentActivate()
  • :<Key><osfCancel>: PrimitiveParentCancel()
  • :<Key><osfHelp>: Help()
  • :c <Key><osfUp>: SashAction(Key,LargeIncr,Up)
  • :<Key><osfUp>: SashAction(Key,DefaultIncr,Up)
  • :c <Key><osfRight>: SashAction(Key,LargeIncr,Right)
  • :<Key><osfRight>: SashAction(Key,DefaultIncr,Right)
  • :c <Key><osfDown>: SashAction(Key,LargeIncr,Down)
  • :<Key><osfDown>: SashAction(Key,DefaultIncr,Down)
  • :c <Key><osfLeft>: SashAction(Key,LargeIncr,Left)
  • :<Key><osfLeft>: SashAction(Key,DefaultIncr,Left)
  • ∼s ∼m ∼a <Key>Return: PrimitiveParentActivate()
  • s ∼m ∼a <Key>Tab: PrevTabGroup()
  • ∼m ∼a <Key>Tab: NextTabGroup()

Action Routines πŸ’…

The XmPanedWindow action routines are:

  • Help(): 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.
  • NextTabGroup(): Moves the keyboard focus to the next tab group. By default, each pane and sash is a tab group.
  • PrevTabGroup(): Moves the keyboard focus to the previous tab group. By default, each pane and sash is a tab group.
  • SashAction(action) or SashAction(Key,increment,direction): The Start action activates the interactive placement of the pane's borders. The Move action causes the sash to track the position of the pointer. If one of the panes reaches its minimum or maximum size, adjustment continues with the next adjustable pane. The Commit action ends sash motion.

When sash action is caused by a keyboard event, the sash with the keyboard focus is moved according to the increment and direction specified. DefaultIncr adjusts the sash by one line. LargeIncr adjusts the sash by one view region. The direction is specified as either Up, Down, Left, or Right.

Note that the SashAction action routine is not a direct action routine of the XmPanedWindow, but rather an action of the Sash control created by the XmPanedWindow.

Additional Behavior 🌸

This widget has the following additional behavior:

  • <FocusIn>: Moves the keyboard focus to the sash and highlights it
  • <FocusOut>: Unsets the keyboard focus in the sash and unhighlights it

Virtual Bindings πŸ¦‹

The bindings for virtual keys are vendor specific. For information about bindings for virtual buttons and keys, see VirtualBindings(3).


Composite(3), Constraint(3), Core(3), XmCreatePanedWindow(3), XmManager(3), XmVaCreatePanedWindow(3), and XmVaCreateManagedPanedWindow(3).


And that's the whole vibe, bestie! The footer says it's the XmPanedWindow(library call) page β€” no date in sight, but honestly? Iconic. Go forth and sash your windows like the main character you are. Periodt. πŸ’–βœ¨πŸŽ€