.\" $Xorg: appF,v 1.3 2000/08/17 19:42:49 cpqbld Exp $
.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994
.\" X Consortium
.\" 
.\" Permission is hereby granted, free of charge, to any person obtaining
.\" a copy of this software and associated documentation files (the
.\" "Software"), to deal in the Software without restriction, including
.\" without limitation the rights to use, copy, modify, merge, publish,
.\" distribute, sublicense, and/or sell copies of the Software, and to
.\" permit persons to whom the Software is furnished to do so, subject to
.\" the following conditions:
.\" 
.\" The above copyright notice and this permission notice shall be included
.\" in all copies or substantial portions of the Software.
.\" 
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
.\" OTHER DEALINGS IN THE SOFTWARE.
.\" 
.\" Except as contained in this notice, the name of the X Consortium shall
.\" not be used in advertising or otherwise to promote the sale, use or
.\" other dealings in this Software without prior written authorization
.\" from the X Consortium.
.\" 
.\" Copyright \(co 1985, 1986, 1987, 1988, 1991, 1994
.\" Digital Equipment Corporation, Maynard, Massachusetts.
.\" 
.\" Permission to use, copy, modify and distribute this documentation for any
.\" purpose and without fee is hereby granted, provided that the above copyright
.\" notice appears in all copies and that both that copyright notice and this
.\" permission notice appear in supporting documentation, and that the name of
.\" Digital not be used in in advertising or publicity pertaining
.\" to distribution of the software without specific, written prior permission.
.\" Digital makes no representations about the suitability of the
.\" software described herein for any purpose.
.\" It is provided ``as is'' without express or implied warranty.
.\"
.bp
\&
.sp 1
.ce 3
\s+1\fBAppendix F\fP\s-1

\s+1\fBResource Configuration Management\fP\s-1
.sp 2
.LP
.XS
\fBAppendix F \(em Resource Configuration Management\fP
.XE
Setting and changing resources in X applications can be difficult for
both the application programmer and the end user.  \fBResource
Configuration Management (RCM)\fP addresses this problem by changing 
the \fBX Intrinsics\fP to immediately modify a resource for a 
specified widget and each child widget in the hierarchy.  
In this context, immediate means: no sourcing of a resource 
file is required; the application does not need to be restarted for the 
new resource values to take effect; and the change
occurs immediately.
.LP
The main difference between \fBRCM\fP and the \fBEditres\fP 
protocol is that the \fBRCM\fP
customizing hooks reside in the \fBIntrinsics\fP and thus are linked with
other toolkits such as Motif and the Athena widgets.  However, the
\fBEditRes\fP protocol requires the application to link with the 
\fBEditRes\fP
routines in the Xmu library and Xmu is not used by all applications that
use Motif.  Also, the \fBEditRes\fP protocol uses ClientMessage, 
whereas the
\fBRCM\fP \fBIntrinsics\fP hooks use \fBPropertyNotify\fP events.
.LP
X Properties and the \fBPropertyNotify\fP events are used 
to implement \fBRCM\fP and
allow on-the-fly resource customization.  When the X Toolkit is
initialized, two atoms are interned with the strings 
\fICustom Init\fP and
\fICustom Data\fP.  Both 
.PN _XtCreatePopupShell
and
.PN _XtAppCreateShell
register a \fBPropertyNotify\fP event handler to handle these properties.
.LP
A customization tool uses the \fICustom Init\fP property to \fIping\fP an
application to get the application's toplevel window.  When the
application's property notify event handler is invoked, the handler
deletes the property.  No data is transferred in this property.
.LP
A customization tool uses the \fICustom Data\fP property to tell an
application that it should change a resource's value.  The data in
the property contains the length of the resource name (the number
of bytes in the resource name), the resource name and the new
value for the resource.  This property's type is \fBXA_STRING\fP and
the format of the string is:
.IP 1. 5
The length of the resource name (the number of bytes in
the resource name)
.IP 2. 5
One space character
.IP 3. 5
The resource name
.IP 4. 5
One space character
.IP 5. 5
The resource value
.LP
When setting the application's resource, the event handler calls
functions to walk the application's widget tree, determining which
widgets are affected by the resource string, and then applying the value
with 
.PN XtSetValues.
As the widget tree is recursively descended, at
each level in the widget tree a resource part is tested for a match.
When the entire resource string has been matched, the value is applied
to the widget or widgets.
.LP
Before a value is set on a widget, it is first determined if the last
part of the resource is a valid resource for that widget.  It must also
add the resource to the application's resource database and then query
it using specific resource strings that is builds from the widget
information.


