CH13.xml revision 9e7bcd65
1<chapter id='Evolution_of_the_Intrinsics'> 2<title>Evolution of the Intrinsics</title> 3 4<para> 5The interfaces described by this specification have undergone several 6sets of revisions in the course of adoption as an X Consortium 7standard specification. Having now been adopted by the Consortium as 8a standard part of the X Window System, it is expected that this and 9future revisions will retain 10backward compatibility in the sense that fully conforming 11implementations of these specifications may be produced that provide 12source compatibility with widgets and applications written to 13previous Consortium standard revisions. 14</para> 15 16<para> 17The Intrinsics do not place any special requirement on widget 18programmers to retain source or binary compatibility for their widgets 19as they evolve, but several conventions have been established to 20assist those developers who want to provide such compatibility. 21</para> 22 23<para> 24In particular, widget programmers may wish to conform to the convention 25described in <xref linkend='Class_Extension_Records' /> when defining class extension records. 26</para> 27<sect1 id="Determining_Specification_Revision_Level"> 28<title>Determining Specification Revision Level</title> 29<para> 30Widget and application developers who wish to maintain a common source 31pool that will build properly with implementations of the Intrinsics 32at different revision levels of these specifications but that take 33advantage of newer features added in later revisions may use the 34symbolic macro 35<function>XtSpecificationRelease</function>. 36</para> 37<literallayout > 38#define XtSpecificationRelease 6 39</literallayout> 40<para> 41As the symbol 42<function>XtSpecificationRelease</function> 43was new to Release 4, widgets and 44applications desiring to build against earlier implementations should 45test for the presence of this symbol and assume only Release 3 46interfaces if the definition is not present. 47</para> 48</sect1> 49 50<sect1 id="Release_to_Release_Compatibility"> 51<title>Release 3 to Release 4 Compatibility</title> 52<para> 53At the data structure level, Release 4 retains binary compatibility 54with Release 3 (the first X Consortium standard release) for all data 55structures except 56<function>WMShellPart,</function> 57<function>TopLevelShellPart</function>, 58and 59<function>TransientShellPart</function>. 60Release 4 changed the argument type to most procedures that now take 61arguments of type 62<function>XtPointer</function> 63and structure members that are now of type 64<function>XtPointer</function> 65in order to avoid potential ANSI C conformance problems. It is 66expected that most implementations will be binary compatible with the 67previous definition. 68</para> 69 70<para> 71Two fields in 72<function>CoreClassPart</function> 73were changed from 74<function>Boolean</function> 75to 76<function>XtEnum</function> 77to allow implementations additional freedom in specifying the 78representations of each. This change should require no source 79modification. 80</para> 81<sect2 id="Additional_Arguments"> 82<title>Additional Arguments</title> 83<para> 84Arguments were added to the procedure definitions for 85<xref linkend='XtInitProc' xrefstyle='select: title'/>, 86<xref linkend='XtSetValuesFunc' xrefstyle='select: title'/>, 87and 88<xref linkend='XtEventHandler' xrefstyle='select: title'/> 89to provide more information and to 90allow event handlers to abort further dispatching of the current event 91(caution is advised!). The added arguments to 92<xref linkend='XtInitProc' xrefstyle='select: title'/> 93and 94<xref linkend='XtSetValuesFunc' xrefstyle='select: title'/> 95make the initialize_hook and set_values_hook methods 96obsolete, but the hooks have been retained for those widgets that used 97them in Release 3. 98</para> 99</sect2> 100 101<sect2 id="set_values_almost_Procedures"> 102<title>set_values_almost Procedures</title> 103<para> 104The use of the arguments by a set_values_almost procedure was poorly 105described in Release 3 and was inconsistent with other conventions. 106</para> 107 108<para> 109The current specification for the manner in which a set_values_almost 110procedure returns information to the Intrinsics is not compatible with 111the Release 3 specification, and all widget implementations should 112verify that any set_values_almost procedures conform to the current 113interface. 114</para> 115 116<para> 117No known implementation of the Intrinsics correctly implemented the 118Release 3 interface, so it is expected that the impact of this 119specification change is small. 120</para> 121</sect2> 122 123<sect2 id="Query_Geometry"> 124<title>Query Geometry</title> 125<para> 126A composite widget layout routine that calls 127<xref linkend='XtQueryGeometry' xrefstyle='select: title'/> 128is now expected to store the complete new geometry in the intended structure; 129previously the specification said ``store the changes it intends to 130make''. Only by storing the complete geometry does the child have 131any way to know what other parts of the geometry may still be 132flexible. Existing widgets should not be affected by this, except 133to take advantage of the new information. 134</para> 135</sect2> 136 137<sect2 id="unrealizeCallback_Callback_List"> 138<title>unrealizeCallback Callback List</title> 139<para> 140In order to provide a mechanism for widgets to be notified when they 141become unrealized through a call to 142<xref linkend='XtUnrealizeWidget' xrefstyle='select: title'/>, 143the callback 144list name ``unrealizeCallback'' has been defined by the Intrinsics. A 145widget class that requires notification on unrealize may declare a 146callback list resource by this name. No class is required to declare 147this resource, but any class that did so in a prior revision may find 148it necessary to modify the resource name if it does not wish to use the new 149semantics. 150</para> 151</sect2> 152 153<sect2 id="Subclasses_of_WMShell"> 154<title>Subclasses of WMShell</title> 155<para> 156The formal adoption of the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis> as 157an X Consortium standard has meant the addition of four fields to 158<function>WMShellPart</function> 159and one field to 160<function>TopLevelShellPart</function>. 161In deference to some 162widget libraries that had developed their own additional conventions 163to provide binary compatibility, these five new fields were added at 164the end of the respective data structures. 165</para> 166 167<para> 168To provide more convenience for TransientShells, a field was added 169to the previously empty 170<function>TransientShellPart</function>. 171On some architectures the size of the part structure will not 172have changed as a result of this. 173</para> 174 175<para> 176Any widget implementation whose class is a subclass of 177TopLevelShell 178or 179TransientShell 180must at minimum be 181recompiled with the new data structure declarations. Because 182<function>WMShellPart</function> 183no longer contains a contiguous 184<function>XSizeHints</function> 185data structure, 186a subclass that expected to do a single structure assignment of an 187<function>XSizeHints</function> 188structure to the <emphasis remap='I'>size_hints</emphasis> field of 189<function>WMShellPart</function> 190must be revised, though the old fields remain at the same positions within 191<function>WMShellPart</function>. 192</para> 193</sect2> 194 195<sect2 id="Resource_Type_Converters"> 196<title>Resource Type Converters</title> 197<para> 198A new interface declaration for resource type converters was defined 199to provide more information to converters, to support conversion 200cache cleanup with resource reference counting, and to allow 201additional procedures to be declared to free resources. The old 202interfaces remain (in the compatibility section), and a new set of 203procedures was defined that work only with the new type converter 204interface. 205</para> 206 207<para> 208In the now obsolete old type converter interface, converters are 209reminded that they must return the size of the converted value as well 210as its address. The example indicated this, but the description of 211<xref linkend='XtConverter' xrefstyle='select: title'/> 212was incomplete. 213</para> 214</sect2> 215 216<sect2 id="KeySym_Case_Conversion_Procedure"> 217<title>KeySym Case Conversion Procedure</title> 218<para> 219The specification for the 220<xref linkend='XtCaseProc' xrefstyle='select: title'/> 221function type has been changed 222to match the Release 3 implementation, which included necessary 223additional information required by the function (a pointer to the 224display connection), and corrects the argument type of the source 225KeySym parameter. No known implementation of the Intrinsics 226implemented the previously documented interface. 227</para> 228</sect2> 229 230<sect2 id="Nonwidget_Objects_2"> 231<title>Nonwidget Objects</title> 232<para> 233Formal support for nonwidget objects is new to Release 4. A 234prototype implementation was latent in at least one Release 3 235implementation of the Intrinsics, but the specification has changed 236somewhat. The most significant change is the requirement for a 237composite widget to declare the 238<function>CompositeClassExtension</function> 239record with the <emphasis remap='I'>accepts_objects</emphasis> field set to 240<function>True</function> 241in order to permit a client to create a nonwidget child. 242</para> 243 244<para> 245The addition of this extension field ensures that composite widgets 246written under Release 3 will not encounter unexpected errors if an 247application attempts to create a nonwidget child. In Release 4 there 248is no requirement that all composite widgets implement the extra 249functionality required to manage windowless children, so the 250<emphasis remap='I'>accepts_objects</emphasis> field allows a composite widget to declare that it 251is not prepared to do so. 252</para> 253</sect2> 254</sect1> 255 256<sect1 id="Release_to_Release_Compatibility_2"> 257<title>Release 4 to Release 5 Compatibility</title> 258<para> 259At the data structure level, Release 5 retains complete binary 260compatibility with Release 4. The specification of the 261<function>ObjectPart</function>, 262<function>RectObjPart</function>, 263<function>CorePart</function>, 264<function>CompositePart</function>, 265<function>ShellPart</function>, 266<function>WMShellPart</function>, 267<function>TopLevelShellPart</function>, 268and 269<function>ApplicationShellPart</function> 270instance records was made less strict to permit implementations to 271add internal fields to these structures. Any implementation that 272chooses to do so would, of course, force a recompilation. 273The Xlib specification for 274<function>XrmValue</function> 275and 276<function>XrmOptionDescRec</function> 277was updated to use a new type, 278<function>XPointer</function>, 279for the <emphasis remap='I'>addr</emphasis> and <emphasis remap='I'>value</emphasis> fields, respectively, to avoid 280ANSI C conformance problems. The definition of 281<function>XPointer</function> 282is binary compatible with the previous implementation. 283</para> 284<sect2 id="baseTranslations_Resource"> 285<title>baseTranslations Resource</title> 286<para> 287A new pseudo-resource, XtNbaseTranslations, was defined to permit 288application developers to specify translation tables in application 289defaults files while still giving end users the ability to augment 290or override individual event sequences. This change will affect 291only those applications that wish to take advantage of the new 292functionality or those widgets that may have previously defined 293a resource named ``baseTranslations''. 294</para> 295 296<para> 297Applications wishing to take advantage of the new functionality 298would change their application defaults file, e.g., from 299<literallayout > 300 app.widget.translations: <emphasis remap='I'>value</emphasis> 301to 302 app.widget.baseTranslations: <emphasis remap='I'>value</emphasis> 303</literallayout> 304If it is important to the application to preserve complete 305compatibility of the defaults file between different versions 306of the application running under Release 4 and Release 5, 307the full translations can be replicated in both the ``translations'' 308and the ``baseTranslations'' resource. 309</para> 310</sect2> 311 312<sect2 id="Resource_File_Search_Path"> 313<title>Resource File Search Path</title> 314<para> 315The current specification allows implementations greater flexibility 316in defining the directory structure used to hold the application class 317and per-user application defaults files. Previous specifications 318required the substitution strings to appear in the default path in a 319certain order, preventing sites from collecting all the files for 320a specific application together in one directory. The Release 5 321specification allows the default path to specify the substitution 322strings in any order within a single path entry. Users will need to 323pay close attention to the documentation for the specific 324implementation to know where to find these files and how to specify 325their own 326<emphasis role='strong'>XFILESEARCHPATH</emphasis> 327and 328<emphasis role='strong'>XUSERFILESEARCHPATH</emphasis> 329values when overriding the system defaults. 330</para> 331</sect2> 332 333<sect2 id="Customization_Resource"> 334<title>Customization Resource</title> 335<para> 336<xref linkend='XtResolvePathname' xrefstyle='select: title'/> 337supports a new substitution string, %C, for specifying separate 338application class resource files according to arbitrary user-specified 339categories. The primary motivation for this addition was separate 340monochrome and color application class defaults files. The 341substitution value is obtained by querying the current resource 342database for the application resource name ``customization'', class 343``Customization''. Any application that previously used this 344resource name and class will need to be aware of the possibly 345conflicting semantics. 346</para> 347</sect2> 348 349<sect2 id="Per_Screen_Resource_Database"> 350<title>Per-Screen Resource Database</title> 351<para> 352To allow a user to specify separate preferences for each screen of a 353display, a per-screen resource specification string has been added and 354multiple resource databases are created; one for each screen. This 355will affect any application that modified the (formerly unique) 356resource database associated with the display subsequent to the Intrinsics 357database initialization. Such applications will need to be aware 358of the particular screen on which each shell widget is to be created. 359</para> 360 361<para> 362Although the wording of the specification changed substantially in the 363description of the process by which the resource database(s) is 364initialized, the net effect is the same as in prior releases with the 365exception of the added per-screen resource specification and the new 366customization substitution string in 367<xref linkend='XtResolvePathname' xrefstyle='select: title'/>. 368</para> 369</sect2> 370 371<sect2 id="Internationalization_of_Applications"> 372<title>Internationalization of Applications</title> 373<para> 374Internationalization as defined by ANSI is a technology that 375allows support of an application in a single locale. In 376adding support for internationalization to the Intrinsics 377the restrictions of this model have been followed. 378In particular, the new Intrinsics interfaces are designed not to 379preclude an application from using other alternatives. 380For this reason, no Intrinsics routine makes a call to establish the 381locale. However, a convenience routine to establish the 382locale at initialize time has been provided, in the form 383of a default procedure that must be explicitly installed 384if the application desires ANSI C locale behavior. 385</para> 386 387<para> 388As many objects in X, particularly resource databases, now inherit 389the global locale when they are created, applications wishing to use 390the ANSI C locale model should use the new function 391<function>XtSetLanguageProc</function> 392to do so. 393</para> 394 395<para> 396The internationalization additions also define event filters 397as a part of the Xlib Input Method specifications. The 398Intrinsics enable the use of event filters through additions to 399<xref linkend='XtDispatchEvent' xrefstyle='select: title'/>. 400Applications that may not be dispatching all events through 401<xref linkend='XtDispatchEvent' xrefstyle='select: title'/> 402should be reviewed in the context of this new input method mechanism. 403</para> 404 405<para> 406In order to permit internationalization of error messages, the name 407and path of the error database file are now allowed to be 408implementation-dependent. 409No adequate standard mechanism has yet been suggested to 410allow the Intrinsics to locate the database from localization information 411supplied by the client. 412</para> 413 414<para> 415The previous specification for the syntax of the language string 416specified by 417<function>xnlLanguage</function> 418has been dropped to avoid potential conflicts with other standards. 419The language string syntax is now implementation-defined. 420The example syntax cited is consistent with the previous 421specification. 422</para> 423</sect2> 424 425<sect2 id="Permanently_Allocated_Strings"> 426<title>Permanently Allocated Strings</title> 427<para> 428In order to permit additional memory savings, an Xlib interface was 429added to allow the resource manager to avoid copying certain string 430constants. The Intrinsics specification was updated to explicitly require 431the Object <emphasis remap='I'>class_name</emphasis>, <emphasis remap='I'>resource_name</emphasis>, <emphasis remap='I'>resource_class</emphasis>, 432<emphasis remap='I'>resource_type</emphasis>, <emphasis remap='I'>default_type</emphasis> in resource tables, Core <emphasis remap='I'>actions</emphasis> 433<emphasis remap='I'>string</emphasis> field, and Constraint <emphasis remap='I'>resource_name</emphasis>, <emphasis remap='I'>resource_class</emphasis>, 434<emphasis remap='I'>resource_type</emphasis>, and <emphasis remap='I'>default_type</emphasis> resource fields to be 435permanently allocated. This explicit requirement is expected to 436affect only applications that may create and destroy classes 437on the fly. 438</para> 439</sect2> 440 441<sect2 id="Arguments_to_Existing_Functions"> 442<title>Arguments to Existing Functions</title> 443<para> 444The <emphasis remap='I'>args</emphasis> argument to 445<xref linkend='XtAppInitialize' xrefstyle='select: title'/>, 446<xref linkend='XtVaAppInitialize' xrefstyle='select: title'/>, 447<xref linkend='XtOpenDisplay' xrefstyle='select: title'/>, 448<xref linkend='XtDisplayInitialize' xrefstyle='select: title'/>, 449and 450<xref linkend='XtInitialize' xrefstyle='select: title'/> 451were changed from 452<function>Cardinal</function>* 453to int* to conform to pre-existing convention and avoid otherwise 454annoying typecasting in ANSI C environments. 455</para> 456</sect2> 457</sect1> 458 459<sect1 id="Release_to_Release_Compatibility_3"> 460<title>Release 5 to Release 6 Compatibility</title> 461<para> 462At the data structure level, Release 6 retains binary compatibility 463with Release 5 for all data structures except 464<function>WMShellPart</function>. 465Three resources were added to the specification. 466The known implementations had unused space in the data structure, 467therefore on some architectures and implementations, 468the size of the part structure will not have changed as a result of this. 469</para> 470<sect2 id="Widget_Internals"> 471<title>Widget Internals</title> 472<para> 473Two new widget methods for instance allocation and deallocation were added 474to the Object class. These new methods 475allow widgets to be treated as C++ objects in the C++ environment 476when an appropriate allocation method is specified or inherited 477by the widget class. 478</para> 479 480<para> 481The textual descriptions of the processes of widget creation and 482widget destruction have been edited to provide clarification to widget 483writers. Widgets writers may have reason to rely on the specific order of 484the stages of widget creation and destruction; with that motivation, 485the specification now more exactly describes the process. 486</para> 487 488<para> 489As a convenience, an interface to locate a widget class extension 490record on a linked list, 491<xref linkend='XtGetClassExtension' xrefstyle='select: title'/>, 492has been added. 493</para> 494 495<para> 496A new option to allow bundled changes to the managed set of a Composite 497widget is introduced in the Composite class extension record. 498Widgets that define a change_managed procedure that can accommodate 499additions and deletions to the managed set of children in a single 500invocation should set allows_change_managed_set to <function>True</function> in the 501extension record. 502</para> 503 504<para> 505The wording of the process followed by 506<xref linkend='XtUnmanageChildren' xrefstyle='select: title'/> 507has changed slightly to better handle changes to the managed set 508during phase 2 destroy processing. 509</para> 510 511<para> 512A new exposure event compression flag, 513<function>XtExposeNoRegion</function>, 514was added. Many widgets specify exposure compression, but either 515ignore the actual damage region passed to the core expose procedure or 516use only the cumulative bounding box data available in the event. 517Widgets with expose procedures that do not make use of exact 518exposure region information can indicate that the Intrinsics need not 519compute the region. 520</para> 521</sect2> 522 523<sect2 id="General_Application_Development"> 524<title>General Application Development</title> 525<para> 526<xref linkend='XtOpenApplication' xrefstyle='select: title'/> 527is a new convenience procedure to initialize the toolkit, create an 528application context, open an X display connection, and create the 529root of the widget instance tree. It is identical to the interface 530it replaces, 531<xref linkend='XtAppInitialize' xrefstyle='select: title'/>, 532in all respects except that it takes an additional argument specifying 533the widget class of the root shell to create. 534This interface is now the recommended one so that clients may easily 535become session participants. 536The old convenience procedures appear in the compatibility section. 537</para> 538 539<para> 540The toolkit initialization function 541<xref linkend='XtToolkitInitialize' xrefstyle='select: title'/> 542may be called multiple times without penalty. 543</para> 544 545<para> 546In order to optimize changes in geometry to a set of geometry-managed 547children, a new interface, 548<xref linkend='XtChangeManagedSet' xrefstyle='select: title'/>, 549has been added. 550</para> 551</sect2> 552 553<sect2 id="Communication_with_Window_and_Session_Managers"> 554<title>Communication with Window and Session Managers</title> 555<para> 556The revision of the <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis> as an X Consortium standard has resulted 557in the addition of three fields to the specification of 558<function>WMShellPart</function>. 559These are <emphasis remap='I'>urgency</emphasis>, <emphasis remap='I'>client_leader</emphasis>, and <emphasis remap='I'>window_role</emphasis>. 560</para> 561 562<para> 563The adoption of the <emphasis remap='I'>X Session Management Protocol</emphasis> as an X Consortium 564standard has resulted in the addition of a new shell widget, 565<function>SessionShell</function>, 566and an accompanying subclass verification interface, 567<function>XtIsSessionShell</function>. 568This widget provides support for communication between an application 569and a session manager, as well as a window manager. 570In order to preserve compatibility with existing subclasses of 571<function>ApplicationShell</function>, 572the 573<function>ApplicationShell</function> 574was subclassed to create the new widget class. 575The session protocol requires a modal response to certain checkpointing 576operations by participating applications. The 577<function>SessionShell</function> 578structures 579the application's notification of and responses to messages from the session 580manager by use of various callback lists and by use of the new interfaces 581<xref linkend='XtSessionGetToken' xrefstyle='select: title'/> 582and 583<xref linkend='XtSessionReturnToken' xrefstyle='select: title'/>. 584There is also a new command line argument, -xtsessionID, which facilitates 585the session manager in restarting applications based on the Intrinsics. 586</para> 587 588<para> 589The resource name and class strings defined by the Intrinsics shell 590widgets in 591<function><X11/Shell.h></function> 592are now listed in Appendix E. The addition of a new symbol 593for the 594<function>WMShell</function> 595<emphasis remap='I'>wait_for_wm</emphasis> resource was made to bring the external symbol 596and the string it represents into agreement. The actual resource name 597string in 598<function>WMShell</function> 599has not changed. 600The resource representation type of the XtNwinGravity resource of the 601<function>WMShell</function> 602was changed to XtRGravity in order to register a type 603converter so that window gravity resource values could be specified by name. 604</para> 605</sect2> 606 607<sect2 id="Geometry_Management_2"> 608<title>Geometry Management</title> 609<para> 610A clarification to the specification was made to indicate that geometry 611requests may include current values along with the requested changes. 612</para> 613</sect2> 614 615<sect2 id="Event_Management_2"> 616<title>Event Management</title> 617<para> 618In Release 6, support is provided for registering selectors 619and event handlers for events generated by X protocol extensions 620and for dispatching those events to the appropriate widget. 621The new event handler registration interfaces are 622<xref linkend='XtInsertEventTypeHandler' xrefstyle='select: title'/> 623and 624<xref linkend='XtRemoveEventTypeHandler' xrefstyle='select: title'/>. 625Since the mechanism to indicate selection of extension events is specific 626to the extension being used, the Intrinsics introduces 627<xref linkend='XtRegisterExtensionSelector' xrefstyle='select: title'/>, 628which allows the application to select for the events of interest. 629In order to change the dispatching algorithm to accommodate extension events 630as well as core X protocol events, 631the Intrinsics event dispatcher may now be replaced or enveloped 632by the application with 633<xref linkend='XtSetEventDispatcher' xrefstyle='select: title'/>. 634The dispatcher may wish to call 635<xref linkend='XtGetKeyboardFocusWidget' xrefstyle='select: title'/> 636to determine the widget with the current Intrinsics keyboard focus. 637A dispatcher, after determining the destination widget, may use 638<xref linkend='XtDispatchEventToWidget' xrefstyle='select: title'/> 639to cause the event to be dispatched to the event handlers registered 640by a specific widget. 641</para> 642 643<para> 644To permit the dispatching of events 645for nonwidget drawables, such as pixmaps that are not associated 646with a widget's window, 647<xref linkend='XtRegisterDrawable' xrefstyle='select: title'/> 648and 649<xref linkend='XtUnregisterDrawable' xrefstyle='select: title'/> 650have been added to the library. A related update was made to 651the description of 652<xref linkend='XtWindowToWidget' xrefstyle='select: title'/>. 653</para> 654 655<para> 656The library is now thread-safe, allowing one thread at a time to 657enter the library and protecting global data as necessary from concurrent use. 658Threaded toolkit applications are supported by the 659new interfaces 660<xref linkend='XtToolkitThreadInitialize' xrefstyle='select: title'/>, 661<xref linkend='XtAppLock' xrefstyle='select: title'/>, 662<xref linkend='XtAppUnlock' xrefstyle='select: title'/>, 663<xref linkend='XtAppSetExitFlag' xrefstyle='select: title'/>, 664and 665<xref linkend='XtAppGetExitFlag' xrefstyle='select: title'/>. 666Widget writers may also use 667<xref linkend='XtProcessLock' xrefstyle='select: title'/> 668and 669<xref linkend='XtProcessUnlock' xrefstyle='select: title'/>. 670</para> 671 672<para> 673Safe handling of POSIX signals and other asynchronous notifications 674is now provided by use of 675<xref linkend='XtAppAddSignal' xrefstyle='select: title'/>, 676<xref linkend='XtNoticeSignal' xrefstyle='select: title'/>, 677and 678<xref linkend='XtRemoveSignal' xrefstyle='select: title'/>. 679</para> 680 681<para> 682The application can receive notification of an impending block 683in the Intrinsics event manager by registering interest through 684<xref linkend='XtAppAddBlockHook' xrefstyle='select: title'/> 685and 686<xref linkend='XtRemoveBlockHook' xrefstyle='select: title'/>. 687</para> 688 689<para> 690<xref linkend='XtLastEventProcessed' xrefstyle='select: title'/> 691returns the most recent event passed to 692<xref linkend='XtDispatchEvent' xrefstyle='select: title'/> 693for a specified display. 694</para> 695</sect2> 696 697<sect2 id="Resource_Management_2"> 698<title>Resource Management</title> 699<para> 700Resource converters are registered by the Intrinsics for window gravity 701and for three new resource types associated with session participation: 702RestartStyle, CommandArgArray and DirectoryString. 703</para> 704 705<para> 706The file search path syntax has been extended to make it easier to 707include the default search path, which controls resource 708database construction, by using the new substitution string, %D. 709</para> 710</sect2> 711 712<sect2 id="Translation_Management_2"> 713<title>Translation Management</title> 714<para> 715The default key translator now recognizes the NumLock modifier. 716If NumLock is on and the second keysym is a keypad keysym 717(a standard keysym named with a ``KP'' prefix or a 718vendor-specific keysym in the hexadecimal range 0x11000000 to 0x1100FFFF), 719then the default key translator will 720use the first keysym if Shift and/or ShiftLock is on and will 721use the second keysym if neither is on. Otherwise, it will 722ignore NumLock and apply the normal protocol semantics. 723</para> 724</sect2> 725 726<sect2 id="Selections"> 727<title>Selections</title> 728<para> 729The targets of selection requests may be parameterized, as described 730by the revised <emphasis remap='I'>Inter-Client Communication Conventions Manual.</emphasis>. 731When such requests are made, 732<xref linkend='XtSetSelectionParameters' xrefstyle='select: title'/> 733is used by the requestor to specify the target parameters and 734<xref linkend='XtGetSelectionParameters' xrefstyle='select: title'/> 735is used by the selection owner to retrieve the parameters. 736When a parameterized target is specified in the context of a bundled 737request for multiple targets, 738<xref linkend='XtCreateSelectionRequest' xrefstyle='select: title'/>, 739<xref linkend='XtCancelSelectionRequest' xrefstyle='select: title'/>, 740and 741<xref linkend='XtSendSelectionRequest' xrefstyle='select: title'/> 742are used to envelop the assembly of the request. 743When the parameters themselves are the names of properties, 744the Intrinsics provides support for the economical use of property atom names; 745see 746<xref linkend='XtReservePropertyAtom' xrefstyle='select: title'/> 747and 748<xref linkend='XtReleasePropertyAtom' xrefstyle='select: title'/>. 749</para> 750</sect2> 751 752<sect2 id="External_Agent_Hooks"> 753<title>External Agent Hooks</title> 754<para> 755External agent hooks were added for the benefit of applications 756that instrument other applications for purposes of accessibility, 757testing, and customization. The external agent and the application 758communicate by a shared protocol which is transparent to the application. 759The hook callbacks permit the external agent to register interest 760in groups or classes of toolkit activity and to be notified of the 761type and details of the activity as it occurs. The new interfaces 762related to this effort are 763<xref linkend='XtHooksOfDisplay' xrefstyle='select: title'/>, 764which returns the hook registration widget, and 765<xref linkend='XtGetDisplays' xrefstyle='select: title'/>, 766which returns a list of the X displays associated with an application context. 767</para> 768</sect2> 769</sect1> 770</chapter> 771