The following new features and enhancements were provided in Motif 2.0 or 2.1:
Window manager enhancements
New widgets (ComboBox, SpinBox, Notebook, Container, IconGadget)
Enhancements to existing widgets, including convergence with CDE
Extensibility framework to ease application and widget development, including the Traits mechanism and documented Xme functions
Support for the new X Print Services library (libXp)
General toolkit enhancements, including Uniform Transfer Module (UTM) functions for simplified data transfer
Performance and memory usage improvements
Internationalization enhancements for vertical text, "on-the-spot" input, and user defined characters for Asian languages
mwm now supports X11R6 session management. For details on session management, see "Session Management" in Chapter 2 and the xsm(1) man page.
To promote convergence with the Common Desktop Environment window manager (dtwm), mwm's panning and virtual screen support (Motif 2.0 features) have been removed, as has mwm's support for workspaces.
Motif 2.1 requires X11R6.3 or later, which includes additional support for Vertical Writing, User-Defined Characters (UDCs) and the X Print Service. Due to dependencies within the Motif library on features in X11R6.3, Motif 2.1 applications will not link against earlier versions of the X libraries. ptx/XWM provides X11R6.4 libraries, which are compatible with Motif 2.1.
Following are the major new features in the Motif 2.1 libraries:
The XmPrintShell widget, which provides a higher-level interface to the X Print Services library (libXp). For more information, see "Print Extension," in Chapter 2 and the XmPrintShell(3) man page.
New features that support the internationalization of Motif and developing applications for international markets. Motif now supports the On-The-Spot input method for Text widget. Vertical Writing is also supported.
Compatibility with CDE, the Common Desktop Environment, was given great emphasis in Motif 2.1, even at the expense of compatibility with older versions of OSF/Motif. The following changes may affect application code or behavior:
XmStringCreateLocalized() now handles newlines and tabs.
Labels for automatically created sub-widgets (like the buttons in a File Selection Box) are now unconditionally localized, and may not be set or overridden by the user.
The XmDisplay resource XmNenableThinThickness now has a greater effect than it did in previous versions of Motif.
The XmDisplay resource XmNenableToggleVisual now changes the way XmNindicatorOn and XmNindicatorType values are rendered, instead of simply changing their default values. Applications that called XtSetValues for these resources may notice a change. New constants have been added to obtain the old behavior.
The default value for the XmDisplay resource XmNdragReceiverProtocolStyle has been reverted to XmDRAG_PREFER_PREREGISTER. Users may find that XmDRAG_PREFER_DYNAMIC is more efficient.
The XmNenableEtchedInMenu resource causes buttons and toggles in menus to be rendered with colors different from those in earlier releases.
XmScrolledList and XmScrolledText scrollbar colors are computed differently. They are now derived from the scrolled window's background color, not the color of the XmList or XmText widget.
The XmCxx library of C++ wrappers is no longer a supported part of Motif and has been moved to the demos/lib directory.
This section describes new functionality that affects the Motif Toolkit as a whole.
Motif now enables programmers to write their own Motif widgets, even without a Motif source license. The new Motif Widget Writer's Guide explains how to do this. Also, the following widget-writer features have been added:
Traits mechanism
Motif provides widget writers with about a dozen traits. A widget writer can install any number of these traits on a widget. If a widget holds a particular trait, then that widget is announcing a specific capability to other widgets. For example, a widget holding the XmQTaccessTextual trait is capable of displaying one primary text parcel. See Traits(5).
Xme routines
Motif provides many Xme functions specifically for widget writers. Widget writers should use these functions to get the proper Motif look and feel in their widgets. Widget writers should no longer use the undocumented _Xm functions. To aid in the transition to Xme functions, the Xm/XmP.h header file contains 38 #define statements that convert some of the old _Xm routines into their new Xme equivalents. Thus, if your code calls any of these 38 _Xm routines, the C preprocessor will automatically convert them to the proper Xme routines.
C++ support
Motif provides two C++ foundary widgets to help programmers write widgets in C++.
Exm demonstration widgets
Motif provides the source code for eight demonstration widgets. These widgets, known as the Exm widgets, illustrate how to create various commonly-needed Motif widgets. See the following man pages for information about these widgets: ExmCommandButton(3X), ExmGrid(3X), ExmMenuButton(3X), ExmPanner(3X), ExmSimple(3X), ExmString(3X), ExmStringTransfer(3X), ExmTabButton(3X).
Several widgets and a gadget have been added to provide consistency with the IBM Common User Access (CUA) and Microsoft® Windows® user interfaces:
For example, a SpinBox that displays a date might manage three TextField children, one to display the month, one the day, and one the year. As the user presses the increment arrow, the month advances from one month to the next. At the last item in the ring (for example, December), the SpinBox wraps the ring around to the first item, or, going in the other direction, wraps from the first item to the last. As long as the user holds down the arrow button, the current position in the ring of choices changes continuously, with a spinning effect.
See XmSpinBox(3X) for more information.
To support the input of non-English, internationalized characters, Motif provides a mechanism that enables access to the Input Methods support of X11 Release 5. This mechanism includes the following functions. (Functions followed by an asterisk were present in Motif 1.2, but were not documented.)
XmImGetXIM*
XmImCloseXIM
XmImRegister*
XmImUnregister*
XmImGetXIC
XmImSetXIC
XmImFreeXIC
XmImSetValues*
XmImSetFocusValues*
XmImUnset Focus*
XmImVaSetFocusValues*
XmImVaSetValues*
XmImMbLookupString*
A new resource, XmNinputPolicy, has been added to the VendorShell class to allow users to specify whether their applications require internationalization support on a per-shell or per-widget basis.
Motif now provides right-to-left layout, including the following:
A new resource, XmNlayoutDirection, for the following widgets and their subclass widgets: VendorShell, XmGadget, XmManager, XmMenuShell, and XmPrimitive. XmNstringDirection is a synonym of XmNlayoutDirection.
A new XmDirection data type.
New functions: XmDirectionToStringDirection, XmStringDirectionToDirection, XmDirectionMatch, and XmDirectionMatchPartial.
The following changes have been made to make Motif more compatible with CUA and Microsoft Windows:
The [Push|Toggle|Arrow|Drawn]Button and List widgets now enable the widget to take focus without activation when Ctrl-Btn1 is pressed.
Cascade buttons now toggle the menu posting when clicked. The first click posts the menu and the second click unposts it.
ScrollBar now supports snapback scrolling.
ToggleButton now provides a third, indeterminate, state with an associated visual.
ScrollBar now provides a thermometer-like scale slider visual.
This section describes general widget changes and enhancements that affect the Motif Toolkit.
Motif has extended the support for resource conversion of independent dimensions. Therefore, resource files can now accept the following format:
<floating value><unit>
For example:
*label.width: 3,2 cm
The XmNunitType resource has been expanded to include a broader range of units. A new function, XmConvertStringToUnits, has been added to convert strings to specified units.
A new VendorShell resource, XmNfocusMovedCallback, enables applications and widgets to track pointer focus in gadgets. An application cannot set this resource with XtAddCallback. Instead, the application must set it with the following functions:
XmeAddFocusChangeCallback(vendorshell, cb, client_date)
XmeRemoveFocusChangeCallback(vendorshell, cb, client_data)
MenuShells now inherit their visual information from the widget instance hierarchy instead of their window hierarchy.
The internal virtual key lookup table now allows multiple physical keys to be bound to one virtual key. The XmRVirtualBinding converter has been changed to handle multiple physical keys. The format of the specification for mapping osf keysyms to actual keysyms has been changed to accept multiple bindings.
The manner in which keys involving the Shift modifier are processed has changed. This change allows the numeric keypad to be used to generate numbers using the standard X mechanisms.
Because the default behavior is now to honor the xmodmap keymap bindings, translations and virtual key bindings that use Shift may behave differently. A common symptom is that unshifted keypad and function keys (with or without other modifiers) produce the expected results, but shifted ones do not.
To obtain the old behavior, remove the shifted interpretation from problematic keys using the xmodmap utility. Each entry in a xmodmap keymap table contains up to four keysym bindings. The second and fourth keysyms are for shifted keys. If an expression contains only two keysyms, simply remove the second keysym. If an entry contains three or more keysyms, replace the second keysym with NoSymbol and remove the fourth keysym.
The Uniform Transfer Model (UTM) provides a new way to implement data transfer. It provides a uniform methodology for implementing primary, secondary, clipboard, and drag and drop transfers. UTM centralizes all the conversion and destination code into single supplied procedures. This is meant to simplify the code for supporting the differing data transfer mechanisms. UTM does not affect the way that users transfer data, but it does affect the way in which application programmers and widget writers implement data transfer.
The Motif widgets now use UTM internally to do data transfer.
In Motif 1.2, application programmers and widget writers had to use a complex group of Intrinsics selection routines, Motif clipboard routines, and Motif drag and drop routines to implement the full range of data transfer mechanisms. All of these calls are still available; however, application programmers and widget writers will find it much easier to implement data transfer through UTM. In essence, UTM provides the programmer with an easy-to-use front end to the older data transfer routines.
For application developers, an XmNconvertCallback callback has been added to the following Motif widgets:
An application can define one or more XmNconvertCallback procedures to be called whenever a widget is asked to convert a selection. Thus, the application can use these XmConvertCallback procedures to customize a target conversion. Similarly, an XmNdestinationCallback callback has been added to allow an application to change the information that a widget requests on any kind of transfer. This callback has been added to the following widgets:
The following UTM Xm functions have been added to support transfer:
Several Xme functions have been added to support UTM. Also, the XmQTtransfer trait has been added to support UTM. For details, see the Motif Widget Writer's Guide.
The following enhancements have been made to XmString:
Support for horizontal tabs, which includes new data types (XmTabList, XmTab), a new component type (XmSTRING_COMPONENT_TAB), and new functions (XmTabListInsertTabs, XmTabListCopy, XmTabListFree, XmTabListTabCount, XmTabListGetTab, SmTabListReplacePositions, XmTabListRemoveTabs, XmTabCreate, XmTabFree, XmTabGetValues, XmTabSetValue, XmStringTableProposeTablist)
Support for rendition attributes, which includes new data types (XmRenderTable, XmRendition), new component types (XmSTRING_COMPONENT_RENDITION_BEGIN, XmSTRING_COMPONENT_RENDITION_END), new functions (XmRenderTableAddRenditions, XmRenderTableRemoveRenditions, XmRenderTableCopy, XMRenderTableFree, XmRenderTableGetTags, XmRenderTableGetRendition, XmRenderTableGetRenditions, XmRenditionCreate, XmRenditionFree, XmRenditionRetrieve, XmRenditionUpdate) new XmN*renderTable resources added to all widgets with XmN*fontList resources (XmN*fontList resources become aliases for XmN*renderTable), new XmNnoRenditionClalback and XmnNnoFontCallback resources added to XmDisplay class (with associated new XmDisplayCallbackStruct structure), and new deferred loading of fonts.
Support for parsing information. Includes a new data type (XmParseTable), a new data structure (XmParseMapping), a new type definition (XmParseProc), and new functions (XmParseMappingCreate, XmParseMappingSetValues, XmParseMappingGetValues, XmParseMappingFree, XmParseTableFree, XmStringParseText, XmStringUnparse, XmStringGenerate).
Support for localization and bidirectional layout. Includes the following new XmString component types: XmSTRING_COMPONENT_LOCALE, XmSTRING_COMPONENT_WIDECHAR_TEXT, XmSTRING_COMPONENT_LAYOUT_PUSH, and XmSTRING_COMPONENT_LAYOUT_POP.
A new, single format for XmString representation. This change includes modifying the creation functions to create the new format.
New conversion targets and encoding/decoding functions that include the new targets (_MOTIF_COMPOUND_STRING, _MOTIF_RENDER_TABLE), and new functions (XmCvtXmStringToByteStream, XmCvtByteStreamToXmString, XmRenderTableCvtToProp, XmRenderTableCvtFromProp). Note that the term ASN.1 format has been replaced by ByteStream format.
New XmStringTable functions for creating and converting between XmStringTables and XmStrings or arrays of NULL-terminated strings. The new functions are XmStringTableParseStringArray, XmStringTableUnparse. XmStringTableToXmString, XmStringToXmStringTable.
New miscellaneous convenience functions to better support the use of XmStrings:
XmStringComponentCreate
XmStringGetNextTriple
XmStringPeekNextTriple
XmStringPutRendition
XmStringByteStreamLength
XmCvtXmStringTableToTextProperty
XmCvtTextPropertyToXmStringTable
An application that creates many renderings with different tags will run more efficiently if either the renditions containing the tags are most frequently referred to by charset/locale tag, or rendition begins and ends are created first.
ATTENTION To increase performance and decrease memory leaks, Motif uses string sharing. As a result, when recovering the memory used by a compound string, use the XmStringFree function instead of XtFree(xmstring). The use of XtFree(xmstring) is invalid and can cause core dumps.
The following changes have been made to the Motif menu system:
A new resource, XmNtearOffTitle, has been added to the RowColumn class to enable the window manager to display a title on a tear-off shell.
The popup menu system has been improved. The XmNpopupHandlerCallback callback resource and its associated structure (XmPopupHandlerCallbackStruct) were added to the Primitive and Manager class.
The MenuBar and OptionMenu are now drag resources for the Drag and Drop protocol.
The following enhancements have been made to the Drag and Drop facility:
A new function, XmDropSiteRegistered, tests whether a particular widget is registered as a dropsite.
A new action, DragKey(direction), has been added to the XmDragStart function to ensure that this function can be initiated with a non-button event. The FinishDrag() action has been bound to the Return and osfActivate keys to end the current drag.
A new resource, XmNdragStartCallback, and its associated structure (XmDragStartCallbackStruct) were added to the Display class to cancel drag initiations.
A new resource, XmDROP_SITE_IGNORE, was added to the DropSite class to disable a dropsite. Note that if this value is passed, there will be no dropsite created and any reference to this dropsite in accessor functions (such as XmDropSiteRetrieve) will fail.
Widget actions that take numerical arguments now also take symbolic arguments. The correspondence between the numeric arguments and the symbolic arguments are as follows:
For XmSelectionBox, XmCommand, and XmFileSelectionBox, the numeric arguments 0, 1, 2, and 3 correspond to the symbolic arguments Previous, Next, First, and Last, respectively.
For the XmScrollBar actions IncrementUpOrLeft or PageUpOrLeft, the numeric arguments 0, 1 correspond to the symbolic arguments Up, Left respectively. For the actions IncrementDownOrRight or PageDownOrRight, the numeric arguments 0, 1 correspond to the symbolic arguments Up, Right respectively.
Gadget implementations have been changed with regard to color resources. The following resources are available for Gadget and its various subclasses:
XmNbackground
XmNbottomShadowColor
XmNbottomShadowPixmap
XmNforeground
XmNhighlightColor
XmNhighlightPixmap
XmNtopShadowColor
XmNtopShadowPixmap
XmInternAtom has been obsoleted by XInternAtom. If your application calls XmIntermAtom, the call resolves to XInternAtom.
XmGetAtomName has been obsoleted by XGetAtomName. If your application calls XmGetAtomName, the call resolves to XGetAtomName.
The following changes have been made for traversal:
Widgets now regain focus when they become traversable.
The traversal algorithm has been rewritten and may behave differently for non-grid layouts.
New direction constants (XmTRAVERSE_GLOBALLY_FORWARD and XmTRAVERSE_GLOBALLY_BACKWARD) have been added to implement the XmNenableButtonTab resources of XmDisplay.
Many new Motif demos have been added and several existing demos have been modified. The demos are in the directory /usr/src/ptxWINDOWS/motif. Consult the README file for information about building the demos.
A new resource, XmNdetailShadowThickness, specifies the thickness of the inside arrow shadows.
The status values returned by the Clipboard functions are now enumerated datatypes:
XmClipboardFail = 0
XmClipboardSuccess = 1
XmClipboardTruncate = 2
XmClipboardLocked = 4
XmClipboardBadFormat = 5
XmClipboardNoData = 6
The following resources have been added:
XmNuserData
Specifies a client data pointer for applications; this is an internally used resource.
XmNmotifVersion
Specifies the current version of Motif that the current implementation should behave like.
XmNenableWarp
Authorizes warping of the pointer.
XmNdefaultButtonEmphasis
Specifies whether to change the look of any PushButton widget or gadget that has the XmNshowAsDefault resource set to True.
XmNenableBtn1Transfer
Specifies whether selection and transfer actions are integrated on Button1 and extend actions are activated on Button2.
XmNenableButtonTab
Specifies whether the action for the Tab key is to be modified with regard to keyboard traversal.
XmNenableDragIcon
Specifies which set of icons are to be used for system default cursors during drag and drop operations.
XmNenableEtchedInMenu
Specifies the shadowing of the button widgets and gadgets in menus where the control is activated.
XmNenableToggleColor
Specifies how to determine the default value of the SmNselectColor resource of ToggleButton and ToggleButtonGadget.
XmNenableToggleVisual
Specifies the visual appearance of the ToggleButton widget and/or gadget.
XmNenableUnselectableDrag
Specifies whether it is possible to drag from Label and Scale.
Traversal to a DrawingArea widget is now supported, event if there are traversable children.
The following enhancements have been made:
A new resource, XmNselectedPositions, provides a pointer to an array of selected item positions. A related resource, XmNselectedPositionCount, specifies the number of items.
A new resource, XmNselectionMode, controls keyboard selection modes. This resource supersedes the old XmListSetAddMode convenience function.
A new resource, XmNprimaryOwnership, specifies whether a List takes ownership of the Primary selection when a selection is made inside it.
ScrolledList now performs keyboard scrolling with the ScrollBar callback mechanism.
To improve performance, the Element structure of XmList has been redefined. Any subclass of XmList that accessed the Element structure through the InternalList field of the XmListPart structure must do some recoding. (The Element structure is not directly accessible through the public API; this change can only affect subclasses of XmList.)
An auto_selection_type field has been added to the XmListCallbackStruct structure to indicate the type of automatic selection callback. This fixes the Browse and Extended select callbacks to provide more information about intermediate state.
A new resource, XmNmatchBehavior, allows the application to specify the matching behavior followed by List.
A new resource, XmNselectColor, allows the application to specify the color of the background rectangle used to indicate selected text. To ensure the readability of selected multicolor text, the default value of XmNselectColor is XmREVERSED_GROUND_COLORS, which implements Motif 1.2 behavior.
For List's Navigate option, when an over-the-spot input method (IM) is used, List provides either the spot above the location cursor, or below it if the location cursor is at the top for pre-editing.
The following resources have been added:
XmNdirTextLabelString
Specifies an XmString label above the directory.
XmNfileFilterStyle
Specifies whether "hidden files" will be listed in file and directory scrolling lists.
XmNpathMode
Specifies whether an additional text field will be used to display and edit the filter. It also specifies whether abbreviated or extended versions of filenames are displayed.
A new resource, XmNorientation, handles the horizontal layout of panes. Also, the existing resources XmNspacing, XmNsashIndent and the constraint resources XmNpaneMinimum and XmNpaneMaximum take a Dimension that can be either vertical or horizontal. The translation table has been upgraded to take KUp, KDown, Kleft, and Kright and the widget actions to take Up, Down, Left, and Right as valid parameters.
The PanedWindow action SashAction has been fixed to do robust error checking. The previous implementation of this action checked only the first character of its parameters for correctness. This would allow the following action invocation:
SashAction(Krazy,Doubtful,Uncertain)
to mean:
SashAction(Key,DefaultIncr,Up)
The action has been fixed to perform full string checking, as documented in the Motif Programmer's Guide.
The names of the automatically created children of PanedWindow have been changed to Separator and Sash.
The following enhancements have been made:
The function XmScaleSetTicks provides thermometer-like tick marks in support of CUA.
The new resource XmNslidingMode supports the use of the scale slider for thermometer mode.
The new resource XmNsliderVisual controls the slider visual.
The new resource XmNeditable controls how the scale reacts to user input.
The new resource XmNshowArrows controls how the slider arrows are displayed.
The new resource XmNsliderMark specifies the shape of the slider.
The following enhancements have been made:
The new resource XmNinsensitiveStipple provides a customizable insensitive visual.
The new resource XmNcolorCalulationProc enables per-screen color calculation. Two old functions, XmSetColorCalculation and XmGetColorCalculation were obsoleted.
The new resource XmNbitmapConversionModel provides compatibility with XtGetValues.
The new resource XmNcolorAllocationProc enables user-definable algorigthms for color allocation. Normally, this procedure is application-defined.
The new resource XmNuserData allows the application to attach any screen-specific data.
The behavior of the following resources is now influenced by the Display resource XmNenableDragIcon:
XmNdefaultCopyCursorIcon
XmNdefaultInvalidCursorIcon
XmNdefaultLinkCursorIcon
XmNdefaultMoveCursorIcon
XmNdefaultNoneCursorIcon
XmNdefaultSourceCursorIcon
XmNdefaultValidCursorIcon
The following enhancements have been made:
The type of the XmNshowArrows resource has been changed from Boolean to XtEnum. This enables the resource to accept the values XmNONE, XmEACH_SIDE, XmMAX_SIDE, and XmMIN_SIDE to control the ScrollBar arrow visual.
The new resource XmNsliderVisual specifies the color of the slider visual.
The new resource XmNslidingMode specifies whether the slider should behave like a true slider or a thermometer.
The new resource XmNsliderMark specifies the shape of the slider.
The new convenience function XmScrollBarSetValues can accept a value of zero (0) as a valid slider_size, increment, or page_increment argument, which indicates that it is ignored and left unchanged.
This widget has been enhanced to support user-customizable scroll behavior and for better flexibility and layout performance. The enhancements are based on a new ScrolledWindow/MainWindow implementation that uses a real ClipWindow class. The changes include the following:
A new constraint resource, XmNscrolledWindowChildType, has been added.
MainWindow now provides the following child types for layout at creation time: XmMENU_BAR, XmCommand_WINDOW, and XmMESSAGE_WINDOW.
For children that have a childType of XmWORK_AREA, XmSCROLL_HOR, XmSCROLL_VERT, or XmNO_SCROLL, the position resources (XmNx and XmNy) are now available to the programmer.
An automatic drag (auto drag) capability and a new resource, XmNautoDragModel, have been added.
The List child of an XmSelectionBox now supports an XmNconvertCallback resource. Thus, the List child can now serve as the source of a UTM data transfer.
In multi-line mode, MShift KTab has been changed to do nothing. Use Mctrl Mshift KTab to move to the previous tab group.
The following changes have been made to XmToggleButton and XmToggleButtonGadget:
The new resource XmNunselectColor provides enhanced ToggleButton[Gadget] visuals. This resource controls the color of the indicator. Also, the XmNindicatorOn resource was changed to be an enum type instead of a Boolean.
The default value of the XmNfillOnSelect resource has been changed to accommodate the new indicator types.
All ToggleButton[Gadget] checks and crosses should be drawn in the XmNselectColor when XmNindicatorOn is of type XmINDICATOR_CHECK, XmINDICATOR_CHECK_BOX, or XmINDICATOR_CROSS_BOX and XmNfillOnSelect is True.
The XmNselectColor resource can now take the following additional values: XmDEFAULT_SELECT_COLOR, XmREVERSED_GROUND_COLORS, and XmHIGHLIGHT_COLOR.
When XmNset is XmINDETERMINATE, XmNindicatorOn is XmINDICATOR_NONE, and XmNtoggleMode is XmTOGGLE_INDETERMINATE, the ToggleButton[Gadget] visual is determined by stippling the label and the ToggleButton[Gadget] with a combination of the XmNselectColor and the XmNunselectColor, and the border is flat.
ToggleButton sizes may differ from previous releases because of a bug fix in the margin layout.
The new XmNenableToggleVisual resource of XmDisplay influences certain toggle visuals.
The XmNindicatorType resource supports additional enumerated constants.
The default color of the XmNselectColor resource is now calculated differently.
The new XmNindeterminatePixmap resource defines the pixmap used when the ToggleButton[Gadget] is indeterminate.
The new XmNindeterminateInsensitivePixmap resource defines the pixmap used when the ToggleButton[Gadget] is indeterminate and insensitive.
The new XmNdetailShadowThickness resource specifies the thickness of the inside indicator windows.
The following changes have been made to UIL:
UIL and MRM have been updated to reflect toolkit changes, including support for new widgets, new resources, and new resource types, such as render tables.
Now supports the reading of uid files from in-memory buffers.
WML and UIL have been modified to support Boolean values for enumeration sets.
UIL supports the syntax for units specification for dimensional and positional resources.
UIL has a new function, COMPOUND_STRING_COMPONENT, with the following syntax:
COMPOUND_STRING_COMPONENT(component_type [, {string | ENUMVAL}])
This function produces a compound string that can then be manipulated in UIL in the same manner as any other compound string.
The UIL language now allows integer expressions as rgb values in the rgb statement.
Release 1.2 introduced several undocumented Imakefile/Makefile variables relevant to UIL. These variables continue to be available. The variables specify a list of uil compiler options. The first such variable is named UilFlags. This flag is ordinarily specified in a configuration file to set the uil compiler options for an entire site. The command make Makefile will copy the value of the UilFlags variable into the value of the UILFLAGS variable of the Makefile.
A new variable, LOCAL_UILFLAGS is also available. Application programmers can use this variable in an Imakefile or a Makefile to set uil compiler options on a particular application. Both UilFlags and LOCAL_UILFLAGS are using MSImpleUidTarget and MComplexUidTarget_n rules in the Motif_rules file. A common usage for these variables is to set the -s option for compiling localized strings in uil files.
The following performance improvements have been made:
All known memory leaks have been eliminated.
To increase performance and decrease memory leaks, Motif now uses string sharing. See the section "XmString" for more information.
Other efforts have been made to optimize XmString performance.
The time XmList requires to create and set up lists with large numbers of items has been improved by a factor of 2.
Motif now creates (and updates) fewer GCs.
Motif now allocates less dynamic memory. In addition, XmRendition and XmRenderTable now maintain usage counters for better performance and more efficient use of allocation memory.
mwm has reduced the number of pointer queries it has to make when a user moves or resizes a window.
Motif's algorithm for cursor bitmap searches has been improved.
Many other Motif search algorithms have been improved.
XmString has converted many of its macros into functions, thus reducing the size of applications that use XmString. The resulting performance degredation is negligible.
XmManager now handles motion events more efficiently.
XmFileSelectionBox has reduced the number of calls it makes to the relatively expensive stat system call.
XmList has reduced the number of XmString copy operations. XmList has also reduced the number of calls it makes to the relatively expensive XTextExtents routine.