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>&lt;X11/Shell.h&gt;</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