<?xml version="1.0" encoding="utf-8"?>
<book fpi="-//Sun::SunSoft//DOCUMENT CDEPO Version 1.0//en" label="fcs" id="cdepo" lang="en" userlevel="developer"><title lang="en">Common Desktop Environment: Programmer's Overview</title><bookinfo><bookbiblio><title lang="en">Common Desktop Environment: Programmer's Overview</title><authorgroup lang="en"><author lang="en"><firstname lang="en">Ruairi</firstname><surname lang="en">Boland</surname></author></authorgroup><isbn lang="en"/><pubsnumber lang="en"><gentext type="text">Part No: </gentext>805-3912-10</pubsnumber><pubdate lang="en">October 1998</pubdate><publisher lang="en"><publishername lang="en">Sun Microsystems, Inc.</publishername><address lang="en"><street lang="en">901 San Antonio Road</street><city lang="en">Palo Alto<gentext type="text">, </gentext></city><state lang="en">CA<gentext type="text"></gentext></state><postcode lang="en">94303</postcode><country lang="en">U.S.A.</country></address></publisher><copyright lang="en"><year lang="en">1998</year><holder lang="en">Sun Microsystems</holder></copyright><abstract lang="en"><para lang="en">This book provides a high-level discussion of the CDE development  environment and the developer documentation set. It also contains an  architectural overview of the entire CDE desktop.</para></abstract></bookbiblio><legalnotice lang="en"><para lang="en">This product or document is protected by copyright and distributed under licenses restricting its use, copying, distribution, and decompilation. No part of this product or document may be reproduced in any form by any means without prior written authorization of Sun and its licensors, if any. Third-party software, including font technology, is copyrighted and licensed from Sun suppliers.</para><para lang="en">Parts of the product may be derived from Berkeley BSD systems, licensed from the University of California. UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open Company, Ltd.</para><para lang="en">Sun, Sun Microsystems, the Sun logo, SunDocs, Java, the Java Coffee Cup logo, 
 and Solaris are trademarks, registered trademarks, or service marks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the U.S. and other countries. Products bearing SPARC trademarks are based upon an architecture developed by Sun Microsystems, Inc. </para><para lang="en">The OPEN LOOK and <trademark class="trade" lang="en">Sun</trademark> Graphical User Interface was developed by Sun Microsystems, Inc. for its users and licensees. Sun acknowledges the pioneering efforts of Xerox in researching and developing the concept of visual or graphical user interfaces for the computer industry. Sun holds a non-exclusive license from Xerox to the Xerox Graphical User Interface, which license also covers Sun's licensees who implement OPEN LOOK GUIs and otherwise comply with Sun's written license agreements.</para><para lang="en"><emphasis lang="en" role="strong">RESTRICTED RIGHTS:</emphasis> Use, duplication, or disclosure by the U.S. Government is subject to restrictions of FAR 52.227-14(g)(2)(6/87) and FAR 52.227-19(6/87), or DFAR 252.227-7015(b)(6/95) and DFAR 227.7202-3(a).</para><para lang="en">DOCUMENTATION IS PROVIDED "AS IS" AND ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY INVALID.</para><para lang="fr"/><para lang="en">Ce produit ou document est protégé par un copyright et distribué avec des licences qui en restreignent l'utilisation, la copie, la distribution, et la décompilation. Aucune partie de ce produit ou document ne peut être reproduite sous aucune forme, par quelque moyen que ce soit, sans l'autorisation préalable et écrite de Sun et de ses bailleurs de licence, s'il y en a. Le logiciel détenu par des tiers, et qui comprend la technologie relative aux polices de caractères, est protégé par un copyright et licencié par des fournisseurs de Sun.</para><para lang="en">Des parties de ce produit pourront être dérivées du système Berkeley BSD licenciés par l'Université de Californie. UNIX est une marque déposée aux Etats-Unis et dans d'autres pays et licenciée exclusivement par X/Open Company, Ltd. </para><para lang="en">Sun, Sun Microsystems, le logo Sun, SunDocs, Java, le logo Java Coffee Cup, 
 et Solaris sont des marques de fabrique ou des marques déposées, ou marques de service, de Sun Microsystems, Inc. aux Etats-Unis et dans d'autres pays. Toutes les marques SPARC sont utilisées sous licence et sont des marques de fabrique ou des marques déposées de SPARC International, Inc. aux Etats-Unis et dans d'autres pays. Les produits portant les marques SPARC sont basés sur une architecture développée par Sun Microsystems, Inc.</para><para lang="en">L'interface d'utilisation graphique OPEN LOOK et <trademark class="trade" lang="en">Sun</trademark> a été développée par Sun Microsystems, Inc. pour ses utilisateurs et licenciés. Sun reconnaît les efforts de pionniers de Xerox pour la recherche et le développement du concept des interfaces d'utilisation visuelle ou graphique pour l'industrie de l'informatique. Sun détient une licence non exclusive de Xerox sur l'interface d'utilisation graphique Xerox, cette licence couvrant également les licenciés de Sun qui mettent en place l'interface d'utilisation graphique OPEN LOOK et qui en outre se conforment aux licences écrites de Sun.</para><para lang="en">CETTE PUBLICATION EST FOURNIE "EN L'ETAT" ET AUCUNE GARANTIE, EXPRESSE OU IMPLICITE, N'EST ACCORDEE, Y COMPRIS DES GARANTIES CONCERNANT LA VALEUR MARCHANDE, L'APTITUDE DE LA PUBLICATION A REPONDRE A UNE UTILISATION PARTICULIERE, OU LE FAIT QU'ELLE NE SOIT PAS CONTREFAISANTE DE PRODUIT DE TIERS. CE DENI DE GARANTIE NE S'APPLIQUERAIT PAS, DANS LA MESURE OU IL SERAIT TENU JURIDIQUEMENT NUL ET NON AVENU.</para></legalnotice><subjectset lang="en"><subject lang="en"><subjectterm lang="en">Desktop &amp; Window Systems</subjectterm><subjectterm lang="en">Programming &amp; Tools</subjectterm></subject></subjectset></bookinfo><preface id="preface-19275" lang="en" role="preface"><gentext type="text">Preface</gentext><gentext type="toc">Preface</gentext><title lang="en">Preface</title><highlights lang="en"><para lang="en">The <citetitle lang="en">Common Desktop Environment: Programmer's  Overview</citetitle> provides a high-level view of the Common Desktop  Environment development environment and the developer documentation set. Read  this book first before starting application design and development. </para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">In this manual, the terms <emphasis lang="en">(the) Common Desktop  Environment</emphasis> and <emphasis lang="en">the</emphasis>  <emphasis lang="en">desktop</emphasis> are used interchangeably.</para></note><para lang="en">Outside of the Preface, this manual omits the <citetitle lang="en">Common Desktop  Environment</citetitle> prefix when referring to a Common Desktop Environment  development or run-time environment manual. For example, the <citetitle lang="en">Common  Desktop Environment: Programmer's Overview</citetitle> is referred to as  the <citetitle lang="en">Programmer's Overview</citetitle>.</para></highlights><indexterm significance="normal" id="preface-ix1" lang="en"><primary lang="en">desktop</primary><secondary lang="en">Common Desktop Environment</secondary></indexterm><sect1 id="preface-1" lang="en"><title lang="en">Who Should Use This Book</title><para lang="en">Read the <citetitle lang="en">Programmer's Overview</citetitle> if you  are:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">An application developer who wants to develop a new Common Desktop  Environment application, or integrate an existing  OSF/Motif<superscript lang="en">\256</superscript> or OPEN  LOOK<superscript lang="en">\256</superscript> application into the  desktop<indexterm significance="normal" id="preface-ix2" lang="en"><primary lang="en">Motif</primary></indexterm><indexterm significance="normal" id="preface-ix3" lang="en"><primary lang="en">OPEN LOOK</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">A manager, architect, or project lead interested in designing a project  involving applications that will run on the Common Desktop Environment  desktop</para></listitem></itemizedlist><para lang="en">For the remainder of this manual, OSF/Motif and Open Group Motif are generally referred to as Motif\256.</para></sect1><sect1 id="preface-2" lang="en"><title lang="en">How This Book Is Organized</title><para lang="en">The Programmer's Overview is divided into two parts. Part I  contains an architectural overview of the Common Desktop Environment,  including high-level information on both the run-time and development  environments. Part II contains information useful to know before developing an  application, and describes the development environment components. </para><para lang="en">This section provides brief descriptions of the chapters and appendixes  contained in this manual.</para><para lang="en"><link linkend="archov-13895" lang="en">Chapter 1, Architectural Overview</link> presents an overview of the Common Desktop Environment  architecture.</para><para lang="en"><link linkend="consid-55236" lang="en">Chapter 2, Development Environment Considerations</link> discusses information you should know about the environment before  you start to develop an application.</para><para lang="en"><link linkend="devapplic-28071" lang="en">Chapter 3, Developing an Application</link> presents information specific to developing a Common Desktop  Environment application, such as naming conventions and guidelines to  follow.</para><para lang="en"><link linkend="port-18736" lang="en">Chapter 4, Portability and Maintenance</link> discusses issues pertaining to writing portable and maintainable  applications.</para><para lang="en"><link linkend="basicinteg-27679" lang="en">Chapter 5, Basic Application Integration					</link> summarizes how to make your application launch-integrated (that is,  started by double-clicking an icon on the desktop).</para><para lang="en"><link linkend="recinteg-88933" lang="en">Chapter 6, Recommended Integration</link> provides overviews of all components and guidelines that you should  use so your application has the same look and feel as, and interoperates well  with, other Common Desktop Environment desktop applications.</para><para lang="en"><link linkend="optinteg-74877" lang="en">Chapter 7, Optional Integration</link> provides overviews of the components to incorporate into your  application as needed for added functionality.</para><para lang="en"><link linkend="motifapp-53739" lang="en">Appendix A, Common Desktop Environment Motif</link> describes the differences between Motif 1.2.3 and Common Desktop  Environment Motif.</para><para lang="en"><link linkend="comprefapp-44042" lang="en">Appendix B, Component and Guideline Reference</link> lists in alphabetical order all development environment components  and guidelines, with associated library, header files, and  documentation.</para></sect1><sect1 id="preface-29208" lang="en"><title lang="en">Related Books</title><para lang="en">For information on Motif,  see:<indexterm significance="normal" id="preface-ix4" lang="en"><primary lang="en">Motif</primary><secondary lang="en">related documentation</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><citetitle lang="en">Motif 2.1 - Programmer's Guide</citetitle> from The Open Group (<literal moreinfo="none" lang="en">www.opengroup.org</literal>)</para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Motif 2.1 - Programmer's Reference</citetitle> from The Open Group (<literal moreinfo="none" lang="en">www.opengroup.org</literal>)</para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">CDE 2.1 - Programmer's Overview and Guide</citetitle> from The Open Group (<literal moreinfo="none" lang="en">www.opengroup.org</literal>)</para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">CDE 2.1/Motif 2.1 - Style Guide and Glossary</citetitle> from The Open Group (<literal moreinfo="none" lang="en">www.opengroup.org</literal>)</para></listitem></itemizedlist><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">The <citetitle lang="en">Common Desktop Environment: Style Guide and Certification Checklist</citetitle> is an extension of the <citetitle lang="en">CDE 2.1/Motif 2.1 - Style Guide and Glossary</citetitle> to the Common Desktop Environment.</para></note><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><citetitle lang="en">OSF Application Environment Specification (AES) User  Environment Volume</citetitle>, by Open Software Foundation, 11  Cambridge Center, Cambridge, MA 02142, published by PTR Prentice Hall,  Englewood Cliffs, NJ 07632</para></listitem></itemizedlist><para lang="en">For information on POSIX, see the IEEE Std 1003.1-1990 standard, which  you can order from: IEEE  Service Center, 445 Hoes Lane, P.O. Box 1331, Piscataway, NJ 08855<indexterm significance="normal" id="preface-ix5" lang="en"><primary lang="en">POSIX</primary></indexterm></para><para lang="en">For information on Xlib,  see:<indexterm significance="normal" id="preface-ix6" lang="en"><primary lang="en">Xlib documentation</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><citetitle lang="en">Xlib Programming Manual</citetitle> for Version 11 (Volume 1)  by Adrian Nye, published by O'Reilly &amp; Associates, Sebastopol, CA,  95472</para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Xlib Reference Manual</citetitle> for Version 11 (Volume 2),  published by O'Reilly &amp; Associates, Sebastopol, CA, 95472</para></listitem></itemizedlist><para lang="en">For information on Xt,  see:<indexterm significance="normal" id="preface-ix7" lang="en"><primary lang="en">Xt documentation</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><emphasis lang="en">X Toolkit Intrinsics Programming Manual</emphasis>, (Volume 4)  by Adrian Nye and Tim O'Reilly, published by O'Reilly and Associates,  Sebastopol, CA 95472.</para></listitem><listitem lang="en"><para lang="en"><emphasis lang="en">X Toolkit Intrinsics Reference Manual,</emphasis> (Volume 5)  edited by Tim O'Reilly, published by O'Reilly and Associates, Sebastopol, CA  95472.</para></listitem></itemizedlist><para lang="en">For more information on ToolTalk\256,  see:<indexterm significance="normal" id="preface-ix8" lang="en"><primary lang="en">ToolTalk documentation</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><citetitle lang="en">The ToolTalk Service: An Inter-Operability  Solution</citetitle>, published by SunSoft Press and PTR Prentice Hall,  Englewood Cliffs, NJ 07632, ISBN 0-13-088717-X</para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">ToolTalk and Open Protocols: Inter-Application  Communication</citetitle>, by Astrid Julienne and Brian Holtz, published by  SunSoft Press and PTR Prentice Hall, Englewood Cliffs, NJ 07632, ISBN  013-031055-7</para></listitem></itemizedlist><para lang="en">In addition to the <citetitle lang="en">Programmer's Overview</citetitle>,  the development environment documentation set consists  of:<indexterm significance="normal" id="preface-ix9" lang="en"><primary lang="en">documentation set</primary><secondary lang="en">development environment</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><citetitle lang="en">Common Desktop Environment: Style Guide and Certification  Checklist</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Common Desktop Environment: Application Builder User's  Guide</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's  Guide</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Common Desktop Environment: Help System Author's and  Programmer's Guide</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Common Desktop Environment: ToolTalk Messaging  Overview</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Common Desktop Environment: Internationalization  Programmer's Guide</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Common Desktop Environment: Desktop KornShell User's  Guide</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Common Desktop Environment</citetitle>: Product  Glossary</para></listitem><listitem lang="en"><para lang="en">Online man pages</para></listitem></itemizedlist><para lang="en">For more information on these development environment books, see the  following section, <link linkend="preface-61920" lang="en">"Development Environment Documentation"</link>  . </para><para lang="en">The run-time environment documentation set consists  of:<indexterm significance="normal" id="preface-ix10" lang="en"><primary lang="en">documentation set</primary><secondary lang="en">run-time</secondary></indexterm><indexterm significance="normal" id="preface-ix11" lang="en"><primary lang="en">run-time</primary><secondary lang="en">documentation set</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><citetitle lang="en">Solaris Common Desktop Environment: User's  Guide</citetitle></para></listitem><listitem lang="en"><para lang="en"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System  Administrator's Guide</citetitle></para></listitem><listitem lang="en"><para lang="en">Online help volumes</para></listitem></itemizedlist><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">The <citetitle lang="en">Advanced User's and System Administrator's  Guide</citetitle> contains information to help you integrate an application  into the desktop.</para></note></sect1><sect1 id="preface-61920" lang="en"><title lang="en">Development Environment Documentation</title><para lang="en">This section provides an overview of each manual--except for the  <citetitle lang="en">Programmer's Overview</citetitle>--in the developer  documentation set.</para><sect2 id="preface-3" lang="en"><title lang="en">Common Desktop Environment: Style Guide and Certification  Checklist</title><para lang="en">The Common Desktop Environment: Style Guide and Certification Checklist  provides application design style guidelines and the list of requirements for  Common Desktop Environment application-level certification. These requirements  consist of the Motif Version 2.1 requirements with Common Desktop  Environment-specific additions.</para><para lang="en">The checklist describes keys using a model keyboard mechanism. It  assumes that your application is being designed for a left-to-right language  environment in an English-language locale. Wherever keyboard input is  specified, the keys are indicated by the engravings on the Motif model  keyboard. Mouse buttons are described using a virtual button mechanism to  better describe behavior independent from the number of buttons on the  mouse.</para><para lang="en">This book provides information to assist the application designer in  developing consistent applications and behaviors within the applications. </para></sect2><sect2 id="preface-4" lang="en"><title lang="en">Common Desktop Environment: Application Builder User's  Guide</title><para lang="en">The Common Desktop Environment Application Builder (also called App  Builder) is an interactive tool for developing Common Desktop Environment  applications. It provides features that facilitate both the construction of an  application graphical user interface (GUI) and the incorporation of the  desktop's many useful desktop services (such as Help, ToolTalk, Drag and  Drop). The <citetitle lang="en">Common Desktop Environment: Application Builder  User's Guide</citetitle> explains how to create an interface by dragging  and dropping "objects" from a palette. It also explains how to  make connections between objects in the interface, how to use the application  framework editor to easily integrate desktop services, how to generate C code,  and how to add application code to the App Builder
output to produce a  finished application.</para></sect2><sect2 id="preface-5" lang="en"><title lang="en">Common Desktop Environment: Programmer's Guide</title><para lang="en">The <citetitle lang="en">Common Desktop Environment: Programmer's  Guide</citetitle> has two parts. Each part provides a detailed description of  elements of the Common Desktop Environment, a conceptual diagram, and a  task-oriented description of how to use each element, complete with code  examples. </para><para lang="en">Part I, "Recommended Integration," provides an overview of  basic integration, and describes how to integrate new applications with the  Session Manager, fonts, and drag and drop. It also discusses displaying error  messages.</para><para lang="en">Part II, "Optional Integration," describes how to integrate  new applications with the Workspace Manager, Common Desktop Environment Motif  widgets, actions, data types, and Calendar.</para><para lang="en">The <citetitle lang="en">Programmer's Guide</citetitle> provides an  introduction to the application program interfaces (APIs) for the components  referred to in the descriptions of Parts I and II above, with cross-references  to the relevant man pages. Details are covered in the man pages.</para></sect2><sect2 id="preface-6" lang="en"><title lang="en">Common Desktop Environment: Help System Author's and  Programmer's Guide</title><para lang="en">The <citetitle lang="en">Common Desktop Environment: Help System Author's  and Programmer's Guide</citetitle> describes how to develop online help  for application software. It covers how to create help topics and how to  integrate online help into a Motif application. </para><para lang="en">The audience for this book includes:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Authors who design, create, and view online help information</para></listitem><listitem lang="en"><para lang="en">Developers who want to create software applications that provide a fully  integrated help facility</para></listitem></itemizedlist><para lang="en">This book has four parts. Part I describes the collaborative role that  authors and developers undertake to design application help. Part II provides  information for authors organizing and writing online help. Part III describes  the Help System application programmer's toolkit. Part IV contains  information for both authors and programmers about preparing online help for  different language environments.</para></sect2><sect2 id="preface-7" lang="en"><title lang="en">Common Desktop Environment: ToolTalk Messaging Overview</title><para lang="en">The <citetitle lang="en">Common Desktop Environment: ToolTalk Messaging  Overview</citetitle> describes the ToolTalk components, commands, and error  messages offered as convenience routines to enable your application to conform  to Media Exchange and Desktop Services message set conventions. This manual is  for developers who create or maintain applications that use the ToolTalk  service to interoperate with other applications.</para><para lang="en">The <citetitle lang="en">ToolTalk Messaging Overview</citetitle> does  <emphasis lang="en">not</emphasis> describe general ToolTalk functionality. For detailed  information about the ToolTalk service, refer to <citetitle lang="en">The ToolTalk  Service: An Inter-Operability Solution</citetitle>. For tips and techniques to  help make using ToolTalk easier, read <citetitle lang="en">ToolTalk and Open Protocols:  Inter-Application Communication</citetitle>. Both of these books are listed in  <link linkend="preface-29208" lang="en">"Related Books"</link>. </para></sect2><sect2 id="preface-8" lang="en"><title lang="en">Common Desktop Environment: Internationalization Programmer's  Guide</title><para lang="en">The Common Desktop Environment: Internationalization Programmer's  Guide provides information for internationalizing an application so that it  can be easily localized to support various languages and cultural conventions  in a consistent user interface.</para><para lang="en">Specifically, this guide:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Provides guidelines and hints for developers on how to write  applications for worldwide distribution</para></listitem><listitem lang="en"><para lang="en">Provides an overall view of internationalization topics that span  different layers within the desktop</para></listitem><listitem lang="en"><para lang="en">Provides pointers to reference and more detailed documentation. In some  cases, standard documentation is referenced.</para></listitem></itemizedlist><para lang="en">This guide is not intended to duplicate the existing reference or  conceptual documentation, but rather to provide guidelines and conventions on  specific internationalization topics. It focuses on internationalization  topics and not on any specific component or layer in an open software  environment.</para></sect2><sect2 id="preface-9" lang="en"><title lang="en">Common Desktop Environment: Desktop KornShell User's  Guide</title><para lang="en">The <citetitle lang="en">Common Desktop Environment: Desktop KornShell  User's Guide</citetitle> describes how to create Motif applications with  Desktop Korn shell (<literal moreinfo="none" lang="en">dtksh</literal>) scripts. It contains several  example scripts of increasing complexity, in addition to the basic information  a developer needs to get started. </para><para lang="en">This guide is intended for developers who find a shell-style scripting  environment suitable for a particular task. It assumes a knowledge of Korn  shell programming, Motif, the Xt Intrinsics, and, to a lesser extent,  Xlib.</para></sect2><sect2 id="preface-10" lang="en"><title lang="en">Common Desktop Environment: Product Glossary</title><para lang="en">The <citetitle lang="en">Common Desktop Environment: Product Glossary</citetitle>  provides a comprehensive list of terms used in the Common Desktop Environment.  The Glossary is the source and reference base for all users of the desktop.  Because the audience for this glossary consists of many different types of  users--from end users to developers to translators--the format for a  glossary definition may include information about the audience, where the term  originated, and the Common Desktop Environment component that uses the term in  its graphical user interface.</para></sect2></sect1><sect1 id="preface-11" lang="en"><title lang="en">What Typographic Changes and Symbols Mean</title><para lang="en">The following table describes the type changes and symbols used in this  book.<command moreinfo="none" lang="en"/></para><table frame="topbot" id="preface-tbl-12" lang="en"><gentext type="text">Table P-1 </gentext><title lang="en">Typographic Conventions</title><tgroup cols="3" colsep="0" rowsep="0" lang="en"><colspec colnum="1" colname="column1" colwidth="2*"/><colspec colnum="2" colname="column2" colwidth="4*"/><colspec colnum="3" colname="column3" colwidth="4*"/><thead lang="en"><row rowsep="1" lang="en"><entry colname="column1" align="left" valign="bottom" lang="en"><para lang="en">Typeface or  Symbol</para></entry><entry colname="column2" align="left" valign="bottom" lang="en"><para lang="en">Meaning</para></entry><entry colname="column3" align="left" valign="bottom" lang="en"><para lang="en">Example</para></entry></row></thead><tbody lang="en"><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">AaBbCc123</literal></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">The names of  commands, files, and directories; onscreen computer output</para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en">Edit your  <filename moreinfo="none" lang="en">.login</filename> file.</para><para lang="en">Use <command moreinfo="none" lang="en">ls 
<option lang="en"><gentext type="text">-</gentext>a</option></command> to list all files.</para><para lang="en"><literal moreinfo="none" lang="en">system%  You have mail.</literal></para><para lang="en"/></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><emphasis lang="en">AaBbCc123</emphasis></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Command-line  placeholder:</para><para lang="en">replace with a real name or value</para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en">To delete a file,  type <command moreinfo="none" lang="en">rm</command>  <replaceable lang="en">filename</replaceable>.</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><emphasis lang="en">AaBbCc123</emphasis></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Book titles, new  words or terms, or words to be emphasized</para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en">Read Chapter 6 in  <citetitle lang="en">User's Guide</citetitle>. These are called  <emphasis lang="en">class</emphasis> options. </para><para lang="en">You <emphasis lang="en">must</emphasis>  be root to do this.</para></entry></row></tbody></tgroup></table></sect1></preface><part id="part1-1" lang="en"><gentext type="text">Part I</gentext><gentext type="toc">Part I Common Desktop Environment   Architectural Overview</gentext><title lang="en">Common Desktop Environment   Architectural Overview</title><partintro lang="en" role="no-manpages"><para lang="en"/></partintro><chapter id="archov-13895" lang="en"><gentext type="text">Chapter 1</gentext><gentext type="toc">1.  Architectural Overview</gentext><title lang="en">Architectural Overview</title><highlights lang="en"><para lang="en">This chapter presents a high-level architectural view of the Common  Desktop Environment. For details regarding the desktop run-time environment,  consult the run-time documentation set and the online help volumes. For  details regarding the desktop development environment components, see  <link linkend="recinteg-88933" lang="en">Chapter 6, Recommended Integration</link>, <link linkend="optinteg-74877" lang="en">Chapter 7, Optional Integration</link>, <link linkend="motifapp-53739" lang="en">Appendix A, Common Desktop Environment Motif</link>, the development environment documentation set, and the online man pages.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"><link linkend="archov-17536" lang="en">"Conceptual Overview"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="archov-2" lang="en">"Data Interaction GUIs"</link></para></listitem><listitem lang="en"><para lang="en"> <link linkend="archov-3" lang="en">"Multiuser Collaboration"</link></para></listitem><listitem lang="en"><para lang="en"><link linkend="archov-20797" lang="en">"Desktop Management"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="archov-41942" lang="en">"Motif GUI Engine"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="archov-85415" lang="en">"Integration Technologies"</link> </para></listitem></itemizedlist></highlights><sect1 id="archov-17536" lang="en"><title lang="en">Conceptual Overview</title><para lang="en">The Common Desktop Environment architecture has many cross-process  relationships. The three-process relationship of an X client, a window  manager, and the <trademark class="trade" lang="en">X Window System</trademark> server seems simple by comparison. The  area covered by the Common Desktop Environment is broad, but the layering in  the system is not as rigorous as that of Motif, Xt, and Xlib. The  relationships between high-level system components are diverse and extensible.  This chapter groups the technologies to illustrate that each desktop component  fits into an overall whole. The Common Desktop Environment can be divided  into: <indexterm significance="normal" id="archov-ix12" lang="en"><primary lang="en">architecture, Common Desktop Environment</primary></indexterm> <indexterm significance="normal" id="archov-ix13" lang="en"><primary lang="en">Motif</primary></indexterm></para><figure float="0" id="archov-fig-1" lang="en"><gentext type="text">Figure 1-1 </gentext><title lang="en">Conceptual overview of Common Desktop Environment</title><graphic filename="figures/arch_ov.fig55.epsi.gif" width="425" depth="293" scale="70" id="gr1" lang="en"/></figure><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Data interaction graphical user interfaces  (GUIs)--Application-level components that are available for user  interaction, invocable by other applications. Think of these as programming  components at a larger granularity than widgets.  <indexterm significance="normal" id="archov-ix14" lang="en"><primary lang="en">data interaction graphical user interfaces</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Multiuser collaboration--Defines and uses application program  interfaces (APIs) that enable collaboration between users on the network,  particularly in the areas of calendar management, network resource naming, and  network file sharing.<indexterm significance="normal" id="archov-ix15" lang="en"><primary lang="en">multiuser collaboration</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Desktop management--Provides components that negotiate the visual  relationships between entities on the desktop. These include the following:  Window Manager, Workspace Manager, Session Manager, Application Manager, File  Manager, Style Manager, and the Front  Panel.<indexterm significance="normal" id="archov-ix16" lang="en"><primary lang="en">desktop management</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Motif GUI engine--Includes those components that implement the  controls available to the user and includes the Common Desktop Environment  Motif toolkit, additional widgets, a GUI shell (Desktop Korn shell), and a GUI  construction tool (Application  Builder).<indexterm significance="normal" id="archov-ix17" lang="en"><primary lang="en">graphical user interface engine</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Integration technologies--Represent technologies that do not  generate GUIs, but are used as infrastructure by the rest of the desktop.  These technologies include process execution control, application messaging  (mechanism and protocols), data typing, and method  invocation.<indexterm significance="normal" id="archov-ix18" lang="en"><primary lang="en">integration technologies</primary></indexterm></para></listitem></itemizedlist></sect1><sect1 id="archov-2" lang="en"><title lang="en">Data Interaction GUIs</title><indexterm significance="normal" id="indexterm-1" lang="en"><primary lang="en">data interaction graphical user interfaces</primary></indexterm><para lang="en">The Common Desktop Environment supplies a registration  service, the ToolTalk Messaging Service, that enables an application to find  an available service provider. ToolTalk provides the low-level messaging  infrastructure. A companion mechanism, called the actions system, provides a  consistent abstraction layer on top of both the traditional <trademark class="trade" lang="en">UNIX</trademark> command-line interface to applications and the Common Desktop  Environment-recommended ToolTalk interface to applications. Actions, as  semantic entities, are exposed to the end user through higher levels of  software. Both actions and ToolTalk are discussed in more detail in  <link linkend="archov-85415" lang="en">"Integration Technologies"</link>  .<indexterm significance="normal" id="archov-ix20" lang="en"><primary lang="en">UNIX</primary></indexterm></para><para lang="en">The desktop contains components that are available through action and  ToolTalk APIs. Examples include GUIs to show a view of a directory, submit a  print job, view the contents of the Trash Can, edit some text, show help  information, compose a calendar appointment, and compose a mail  message.<indexterm significance="normal" id="archov-ix21" lang="en"><primary lang="en">actions</primary></indexterm></para><para lang="en">You can also incorporate actions and ToolTalk message support into your  application so that the application-specific services they supply are  available to the desktop and other applications. Particularly, applications  should provide the composition, viewing, editing, and printing services for  both proprietary and standard format data. This way, applications that are  coded to accept an extensible set of data types automatically gain more  capabilities as more media handlers are added to the system. The Common  Desktop Environment File Manager, Front Panel, and Mailer attachment GUI are  examples of such  applications.<indexterm significance="normal" id="archov-ix22" lang="en"><primary lang="en">ToolTalk Messaging Service</primary></indexterm><indexterm significance="normal" id="archov-ix23" lang="en"><primary lang="en">File Manager</primary></indexterm><indexterm significance="normal" id="archov-ix24" lang="en"><primary lang="en">Front Panel</primary></indexterm><indexterm significance="normal" id="archov-ix25" lang="en"><primary lang="en">Mailer</primary></indexterm></para><para lang="en">Media is used as a generic term for anything that can be presented to  the user to convey information. The desktop provides media handlers for  appointments, mail messages, mail folders, text, icons, and help data. Vendors  have extended the desktop with additional media handlers, including  <trademark class="trade" lang="en">PostScript</trademark>, many kinds of image file formats, and audio data.<indexterm significance="normal" id="archov-ix26" lang="en"><primary lang="en">data interaction graphical user interfaces</primary></indexterm></para></sect1><sect1 id="archov-3" lang="en"><title lang="en">Multiuser Collaboration</title><indexterm significance="normal" id="archov-ix27" lang="en"><primary lang="en">multiuser collaboration</primary></indexterm><para lang="en">While the ToolTalk and action mechanisms encourage  cooperation between applications, the desktop also defines cross-user  collaboration technologies. This means distributed access to shared user data.  The desktop has defined some basic sharing mechanisms and has also built on  top of existing mechanisms.</para><para lang="en">An example of building on an existing mechanism is the remote procedure  call (RPC) client/service implementation of calendar management. The desktop  provides a client-side library and API, RPC protocol, and daemon/service that  enables users to share appointment information. (The API is being standardized  through X.400 Application Programming Interface Association (XAPIA) to enable  a cross-UNIX, PC, and palmtop calendar standard.) The RPC protocol enables a  user to browse and directly edit another user's calendar. Access is controlled  by a user-specific access control mechanism. Calendars are tied to hosts, and  a calendar's data is maintained by a host-specific daemon. The desktop names  calendars through a <literal moreinfo="none" lang="en">user@host</literal> format.  <indexterm significance="normal" id="archov-ix28" lang="en"><primary lang="en">remote procedure call (RPC)</primary></indexterm> <indexterm significance="normal" id="archov-ix29" lang="en"><primary lang="en">X.400 API Association (XAPIA)</primary></indexterm></para><para lang="en">The Common Desktop Environment uses conventional distributed file  systems to name files that are sharable on the network. To provide an  interface that is independent of the distributed file system, the desktop  provides an API to translate host-relative file names into locally expressible  file names. Although the desktop is based on the NFS\256 system, it can be  ported to run on top of other distributed file systems. Using the desktop  file-name mapping API, an opaque file name object can be constructed and  passed between desktop clients across the network and resolved in a  host-specific way. Also, to simplify the programming task and end user  metaphor, Common Desktop Environment applications should present remote file  references as local file paths.</para><para lang="en">One of the fundamentals of building multiuser collaboration applications  is the ability to share files. The conventions for naming network files, in  conjunction with a ToolTalk file-sharing mechanism called <emphasis lang="en">file  scoping</emphasis>, enable multiuser collaboration through file sharing. File  scoping is more than a mechanism for simple, exclusive access control.  Cooperating clients can use file-scope access to negotiate for access to  files. For example, an application that has exclusive access to a file could  ask whether the user was done with the file when another application wanted to  gain exclusive access to the file.  <indexterm significance="normal" id="archov-ix30" lang="en"><primary lang="en">file scoping</primary></indexterm> <indexterm significance="normal" id="archov-ix31" lang="en"><primary lang="en">multiuser collaboration</primary></indexterm></para></sect1><sect1 id="archov-20797" lang="en"><title lang="en">Desktop Management</title><para lang="en">The physical metaphor associated with the Common Desktop Environment is  loosely one of a user sitting in a chair surrounded by a bank of desks  (workspaces). As the user swivels the chair (by clicking a push button on the  Front Panel), another desk becomes accessible. On each desk, the following is  available:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">A collection of drawers (File Manager views) in which folders  (directories) and reports (files) are organized.  <indexterm significance="normal" id="archov-ix32" lang="en"><primary lang="en">File Manager</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">A collection of papers in use on the desktop (windows). Some papers are  pushed out of the way (as icons), but are within easy reach.</para></listitem><listitem lang="en"><para lang="en">Continuous display (through Front Panel icons) of a clock, the date, an  indication of new mail, and an indication of something in the trash  can.<indexterm significance="normal" id="archov-ix33" lang="en"><primary lang="en">Front Panel</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Direct access (through Front Panel buttons) to an appointment book  (Calendar), a pad of paper (Text Editor), a terminal (emulator), a mail box  (Mailer), a printer (Print Manager), office lighting controls (Style Manager),  a list of electronic agents (Application Manager and Front Panel personal tool  box), and a guide book  (Help).<indexterm significance="normal" id="archov-ix34" lang="en"><primary lang="en">Calendar</primary></indexterm><indexterm significance="normal" id="archov-ix35" lang="en"><primary lang="en">Text Editor</primary></indexterm><indexterm significance="normal" id="archov-ix36" lang="en"><primary lang="en">Mailer</primary></indexterm><indexterm significance="normal" id="archov-ix37" lang="en"><primary lang="en">Print Manager</primary></indexterm><indexterm significance="normal" id="archov-ix38" lang="en"><primary lang="en">Style Manager</primary></indexterm><indexterm significance="normal" id="archov-ix39" lang="en"><primary lang="en">Application Manager</primary></indexterm><indexterm significance="normal" id="archov-ix40" lang="en"><primary lang="en">Help system</primary></indexterm></para></listitem></itemizedlist><para lang="en">The user drags and drops objects to change their location and make  copies of them. By dropping objects on services, the user gains assistance  with appointment scheduling, editing, mail composition, printing, and so  on.</para><sect2 id="archov-4" lang="en"><title lang="en">Session Management</title><indexterm significance="normal" id="archov-ix41" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">session management</secondary></indexterm><indexterm significance="normal" id="archov-ix42" lang="en"><primary lang="en">Session Manager</primary></indexterm><para lang="en">The state of the desktop can be remembered. At a later time, and perhaps  at a different X display station, the state of the desktop can be re-created.  A session is a snapshot of the state of a user's desktop at a point in time.  The Common Desktop Environment supports two sessions from which the user can  choose:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Home session--A snapshot of the desktop state that reassembles in  the same way each time it is started.</para></listitem><listitem lang="en"><para lang="en">Current session--The state of a desktop saved at logout  time.</para></listitem></itemizedlist><para lang="en">The Common Desktop Environment Session Manager coordinates these  activities, but applications are responsible for saving their own  state.</para><para lang="en">The desktop uses the X11R5 Interclient Communication Conventions style  of session management. This consists mostly of conventions for setting  properties on top-level windows. The desktop extends this by providing a  facility that allocates specific files into which applications can store their  state. A command-line flag then points to this file when the application is  restarted. Applications that maintain multiple top-level windows must save the  state of each of them. </para><para lang="en">A session is associated with a particular user. In the Common Desktop  Environment, the Login Manager is responsible for initial user login. The  Login Manager is an alternative GUI for the UNIX login program. Normally, it  checks the entered password with the user's registered password.  However, vendors can provide authentication schemes tuned to their  platform.<indexterm significance="normal" id="archov-ix43" lang="en"><primary lang="en">Login Manager</primary></indexterm><indexterm significance="normal" id="archov-ix44" lang="en"><primary lang="en">UNIX</primary></indexterm></para><para lang="en">The Login Manager is network-aware. When faced with an X display that is  normally served by host A, the user can log into the user's desktop by  running a session from host B that has full access to the user's normal set of  files and services on host B. This is possible by Login Manager acting as the  desktop's X11 Display Manager (XDM). The XDM Control Protocol (XDMCP) is  used between X11 window servers and XDMs on the network. The Login Manager  displays its login window or host chooser window on any X11 server requesting  either XDM service. This makes the Common Desktop Environment a good match for  use with XDMCP-aware X  terminals.<indexterm significance="normal" id="archov-ix45" lang="en"><primary lang="en">X11 Display Manager (XDM)</primary></indexterm></para><para lang="en">For connections to the X server, the desktop uses the X magic cookie  scheme to control access. If a user on some host machine can read a certain  file within a session owner's home directory, then access to the X server is  granted. An alternative to this per-user authorization is per-host  authorization. This is useful for installations supporting pre-X11R4 clients,  which will be unable to connect to X servers using the X magic cookie  scheme.<indexterm significance="normal" id="archov-ix46" lang="en"><primary lang="en">X magic cookie scheme</primary></indexterm></para><para lang="en">X resource files are handled in the context of Common Desktop  Environment sessions as follows: a set of Common Desktop Environment default  resources is merged with a host version of this file, followed by the user's  <filename moreinfo="none" lang="en">$HOME/.Xdefaults</filename> file, followed by a session-specific  file of resources that have changed through user interaction with the Style  Manager. The result is stored in the <literal moreinfo="none" lang="en">RESOURCE_MANAGER</literal>  property of the root window. To enable fine-grain customization, the C  preprocessor is run on resource files.  <indexterm significance="normal" id="archov-ix47" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">session management</secondary></indexterm> <indexterm significance="normal" id="archov-ix48" lang="en"><primary lang="en">Session Manager</primary></indexterm></para></sect2><sect2 id="archov-5" lang="en"><title lang="en">Application Management</title><indexterm significance="normal" id="archov-ix49" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">application management</secondary></indexterm><para lang="en">One of the obstacles preventing end users from taking full advantage of  the network environment is the difficulty of accessing remote applications.  The Common Desktop Environment provides conventions for:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Installation of applications so that they can be run remotely</para></listitem><listitem lang="en"><para lang="en">User navigation of available applications</para></listitem><listitem lang="en"><para lang="en">Execution of remote applications</para></listitem></itemizedlist><para lang="en">The user can browse the collection of available applications with a GUI  tool called Application Manager. Applications can be dragged onto the desktop  for easier access. Even remote applications are started by a simple  double-click, hiding the network location of a running application. The user  is not aware of any distinction between local and remote applications.</para><para lang="en">This network transparency is accomplished by installing applications on  network hosts designated as <emphasis lang="en">application servers</emphasis>. The  parts of the installation relevant to the desktop require placing certain  files in conventional places in the application's installation hierarchy. The  application server maintains a list of applications that it is serving. Each  host on the network maintains a list of the application servers on the network  that it queries when a user logs into the desktop. This process is referred to  as <emphasis lang="en">application gathering</emphasis>. It results in a  dynamically-generated file hierarchy of actions arranged in folders. (Actions  represent operations that end users can invoke, including starting  applications.)<indexterm significance="normal" id="archov-ix50" lang="en"><primary lang="en">application servers</primary></indexterm><indexterm significance="normal" id="archov-ix51" lang="en"><primary lang="en">actions</primary></indexterm></para><para lang="en">The Common Desktop Environment Application Manager provides a  specialized view of the file system for the end user. Applications are  arranged into groups and groups can be nested (such as in a directory  hierarchy). Your application's installation script associates the  application to a group. This association can be overridden by the system  administrator as part of application server configuration. The set and  arrangement of the actions shown through the Application Manager is a system  resource that is typically shared between multiple users. Users cannot modify  this view.<indexterm significance="normal" id="archov-ix52" lang="en"><primary lang="en">Application Manager</primary></indexterm></para><para lang="en">The user can drag an icon from the Application Manager onto the desktop,  File Manager, Front Panel, and so on. The associated action remains valid as  long as the gathered application that it refers to remains valid. Because  actions represent a form of abstraction and indirection, the actual location  of the application can change over time. This change remains transparent to  the end user (this is explained further in <link linkend="archov-35581" lang="en">"Method Invocation"</link>). The user double-clicks on an action icon to invoke it.<indexterm significance="normal" id="archov-ix53" lang="en"><primary lang="en">Application Manager</primary></indexterm><indexterm significance="normal" id="archov-ix54" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">application management</secondary></indexterm></para></sect2><sect2 id="archov-6" lang="en"><title lang="en">Object Management</title><para lang="en">The Common Desktop Environment captures some object-oriented system  attributes without being dependent upon a completely object-oriented  infrastructure. The desktop provides graphic onscreen images that the user can  pick up and move about, dropping them anywhere it makes semantic sense. These  are viewed as <emphasis lang="en">objects</emphasis> by the user. The File Manager  promotes the object abstraction by providing a graphical way to browse and  modify file and directory objects within the file system. It also provides a  GUI to invoke actions. When the user selects a file, the actions that are  defined for the selected type of file are presented to the  user.<indexterm significance="normal" id="archov-ix55" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">object management</secondary></indexterm><indexterm significance="normal" id="archov-ix56" lang="en"><primary lang="en">object management</primary></indexterm><indexterm significance="normal" id="archov-ix57" lang="en"><primary lang="en">File Manager</primary></indexterm></para><para lang="en">Objects managed by desktop-based applications do not have to be  file-based; in-memory buffers can represent desktop objects, too. The Common  Desktop Environment Mailer handles Multipurpose Internet Mail Extensions  (MIME) messages by displaying attachments to a message as icons in a  scrollable panel. These are objects that behave just like file-based objects  during activities such as drag and drop. The user can drag between the File  Manager and the Mailer. Applications that use drag and drop should maintain  this important user model by supporting both file-based and buffer-based  objects. The desktop drag-and-drop API and protocol make this  straightforward.<indexterm significance="normal" id="archov-ix58" lang="en"><primary lang="en">Multipurpose Internet Mail Extensions (MIME)</primary></indexterm><indexterm significance="normal" id="archov-ix59" lang="en"><primary lang="en">Mailer</primary></indexterm></para></sect2><sect2 id="archov-7" lang="en"><title lang="en">Window Management</title><para lang="en">The Window Manager is essentially the Motif window manager with  extensions to provide the Front Panel GUI and workspace  abstraction.<indexterm significance="normal" id="archov-ix60" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">window management</secondary></indexterm><indexterm significance="normal" id="archov-ix61" lang="en"><primary lang="en">Window Manager</primary></indexterm><indexterm significance="normal" id="archov-ix62" lang="en"><primary lang="en">Front Panel</primary></indexterm></para><para lang="en">The Front Panel can be thought of as a graphic version of the root  window menu supported by many window managers. It can also be thought of as a  tuned object manager in which common objects are readily available to the  user. The Front Panel can show dynamic system information, and it enables the  user to invoke actions and system functions. The user dynamically customizes  the Front Panel by dragging and dropping action icons from the Application  Manager and File Manager onto subpanels. Applications can come equipped with  special configuration files that extend the Front Panel, possibly defining  drop behavior, drop zone animation feedback, and so on. The user can  optionally install these configuration files depending on customization  preferences. <link linkend="archov-fig-8" lang="en">Figure 1-2</link> 
 displays a typical desktop Front  Panel.<indexterm significance="normal" id="archov-ix63" lang="en"><primary lang="en">Application Manager</primary></indexterm><indexterm significance="normal" id="archov-ix64" lang="en"><primary lang="en">File Manager</primary></indexterm></para><figure float="0" id="archov-fig-8" lang="en"><gentext type="text">Figure 1-2 </gentext><title id="archov-20337" lang="en">Typical Front Panel</title><graphic filename="figures/frontpanel.tiff.gif" width="360" depth="35" scale="40" id="gr2" lang="en" remap="dpi-150"/></figure><para lang="en">Workspaces are abstractions supported by the Window Manager that can be  thought of as virtual desktops. Application windows exist within one, some, or  all available workspaces. The user usually determines which workspaces an  application window exists in as part of the user's customization. You should  rarely use the workspace API other than to explicitly designate in which  workspace your application appears on session restart. In general, do not  place your application within multiple workspaces, because this overrides the  user's prerogative.<indexterm significance="normal" id="archov-ix65" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">window management</secondary></indexterm><indexterm significance="normal" id="archov-ix66" lang="en"><primary lang="en">Window Manager</primary></indexterm></para></sect2><sect2 id="archov-9" lang="en"><title lang="en">Style Management</title><para lang="en">The Style Manager enables users to customize their desktop using a GUI.  Users are shielded from advanced concepts, such as X resources, for most  common customization options. Style Manager provides controls for desktop-wide  properties that adjust backdrops, keyboard settings, mouse settings, screen  saver options, window management, and session management. These properties  either do not affect applications directly or indirectly affect them through  the X server or window  manager.<indexterm significance="normal" id="archov-ix67" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">style management</secondary></indexterm><indexterm significance="normal" id="archov-ix68" lang="en"><primary lang="en">Style Manager</primary></indexterm></para><para lang="en">You, as an application developer, are more directly influenced by font  choices, color choices, and input device mappings. The Motif toolkit and the  Common Desktop Environment handle many of these settings transparently for  widgets. However, your application will appear more integrated with the rest  of the desktop if it responds to user font and color preferences. Applications  that directly interact with the mouse will feel more integrated with the rest  of the desktop if they are consistent with other applications; for example, by  using the same mouse button double-click minimum interval value  (<literal moreinfo="none" lang="en">multiClickTime</literal> resource).</para><para lang="en">To accommodate differences between platform vendor's display technology  and available font sets, the Common Desktop Environment defines font aliases  that are indirect names to actual font names. Use these aliases in the same  way as the rest of desktop uses them. </para><para lang="en">The Style Manager provides the user with color selection options to  adjust the desktop color scheme. This color information is private to the  Common Desktop Environment. Applications doing widget subclassing can  indirectly access some of the color scheme by looking at inherited background  pixel values. A call to <function moreinfo="none" lang="en">XmGetColors<gentext type="text">()</gentext></function> generates 3-D  shadow colors.</para><para lang="en">The Common Desktop Environment does not dictate color usage for static  colors, such as those used within icons. For these situations, however, your  application should attempt to use the colors offered by the Common Desktop  Environment Icon Editor, to enhance color sharing.  <indexterm significance="normal" id="archov-ix69" lang="en"><primary lang="en">desktop management</primary><secondary lang="en">style management</secondary></indexterm> <indexterm significance="normal" id="archov-ix70" lang="en"><primary lang="en">Style Manager</primary></indexterm></para></sect2></sect1><sect1 id="archov-41942" lang="en"><title lang="en">Motif GUI Engine</title><para lang="en">Think of the Motif toolkit as the GUI engine of the desktop. This  section discusses Common Desktop Environment Motif, Common Desktop Environment  widgets, and alternative modes of Motif programming.</para><sect2 id="archov-10" lang="en"><title lang="en">Common Desktop Environment Motif Toolkit</title><para lang="en">The Common Desktop Environment Motif toolkit is Motif 2.1 with bug  fixes, enhancements, and some new features. You must explicitly set resources  to enable the new features. Functional additions include file selection box  GUI modifications, different default settings of existing resources (primarily  to lighten up the default border widths), color management enhancements,  internationalization of error messages, and minor usability fixes (some of  which have the effect of easing migration of OPEN LOOK users to the Common  Desktop Environment). <indexterm significance="normal" id="archov-ix71" lang="en"><primary lang="en">graphical user interface engine</primary><secondary lang="en">Common Desktop Environment Motif Toolkit</secondary></indexterm> <indexterm significance="normal" id="archov-ix72" lang="en"><primary lang="en">Common Desktop Environment Motif</primary></indexterm> <indexterm significance="normal" id="archov-ix73" lang="en"><primary lang="en">OPEN LOOK</primary></indexterm></para><para lang="en">Common Desktop Environment Motif and Motif 2.1 are also highly  compatible. Most functions put into Common Desktop Environment Motif have been  introduced into Motif 2.1. As a result, developers have compiled their  applications with Common Desktop Environment Motif, relinked to Motif 2.1, and  ran the applications successfully. Widget subclassing that has not followed  Motif 1.2 subclassing guidelines designed to shield programs from widget size  changes are likely to fail. <indexterm significance="normal" id="archov-ix74" lang="en"><primary lang="en">Motif 2.1</primary></indexterm></para><para lang="en">A drag-and-drop convenience layer has been added on top of the Motif 1.2  drag-and-drop API. In addition, the Common Desktop Environment uses the Motif  1.2 preregister drag feedback protocol. A drop site drag manager process keeps  track of visible drop zones on the desktop. This data is used by a drag source  client process to manage drag feedback interaction. Limited drag time  validation of drop zones is followed by full validation at drop time, with  <emphasis lang="en">snap-back-to-source</emphasis> animation if the drop fails.</para><para lang="en">Common Desktop Environment Motif includes a GUI style guide and  certification checklist that has substantially expanded on the Motif 2.1 style  guide. Additions affect the input models, window management, and GUI design  principles. <indexterm significance="normal" id="archov-ix75" lang="en"><primary lang="en">graphical user interface engine</primary><secondary lang="en">Common Desktop Environment Motif Toolkit</secondary></indexterm> <indexterm significance="normal" id="archov-ix76" lang="en"><primary lang="en">Common Desktop Environment Motif</primary></indexterm></para></sect2><sect2 id="archov-11" lang="en"><title lang="en">Common Desktop Environment Motif Widgets</title><para lang="en">Common Desktop Environment Motif provides two types of widgets that are  not available in Motif 1.2.3:  <indexterm significance="normal" id="archov-ix77" lang="en"><primary lang="en">graphical user interface engine</primary><secondary lang="en">Common Desktop Environment Motif widgets</secondary></indexterm> <indexterm significance="normal" id="archov-ix78" lang="en"><primary lang="en">Common Desktop Environment widgets</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">MenuButton--A menu that doesn't need to be in a row column widget. Thhis was added primarily to help you port applications from a Microsoft\256 Windows or OPEN LOOK environment.</para></listitem><listitem lang="en"><para lang="en">Terminal Emulator widget--Useful for applications designed to mix  the best of a command-line user interface with a GUI</para></listitem><listitem lang="en"><para lang="en">Editor widget--Available for embedding a more full-featured plain  text editor than that available from the Motif Text widget</para></listitem><listitem lang="en"><para lang="en">Help widgets--Handle navigation and interaction with application  help volumes</para></listitem></itemizedlist><para lang="en">Help is delivered with an application in the form of Semantic  Description Language (SDL) files that have been compiled from  <emphasis lang="en">HelpTag</emphasis>, a form of Standard Generalized Markup Language  (SGML) files. The Help system features mixed text and graphics, hyper links,  dynamic reformatting of text, and structured navigation capabilities.  <indexterm significance="normal" id="archov-ix79" lang="en"><primary lang="en">Semantic Description Language (SDL)</primary></indexterm> <indexterm significance="normal" id="archov-ix80" lang="en"><primary lang="en">HelpTag</primary></indexterm> <indexterm significance="normal" id="archov-ix81" lang="en"><primary lang="en">Standard Generalized Markup Language (SGML)</primary></indexterm></para></sect2><sect2 id="archov-12" lang="en"><title lang="en">GUI Shell</title><para lang="en">The Common Desktop Environment includes Desktop Korn shell, an  interpreted scripting language alternative to C programming of the Motif  toolkit. Desktop Korn shell includes selected frequently-used Common Desktop  Environment, Xt, and Xlib APIs. You must use a compiled language to access the  full power of the environment. However, you can write Desktop Korn shell  scripts that participate in desktop integration activities such as drag and  drop, session management, and ToolTalk messaging.  <indexterm significance="normal" id="archov-ix82" lang="en"><primary lang="en">graphical user interface engine</primary><secondary lang="en">Desktop KornShell</secondary></indexterm> <indexterm significance="normal" id="archov-ix83" lang="en"><primary lang="en">Desktop KornShell (dtksh)</primary></indexterm></para><para lang="en">If you are comfortable with shell programming, you may prefer to use  Desktop Korn shell for modest programming tasks because it is:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Well suited to system-administration-type applications because the shell  commands intermix easily with GUI control.</para></listitem><listitem lang="en"><para lang="en">Good for putting a GUI control program on top of character-based  applications because the shell environment handles character-based interaction  in a natural way.</para></listitem><listitem lang="en"><para lang="en">A good way to deliver instruction-set-independent programs to a  heterogeneous collection of hosts. For example, use the Common Desktop  Environment Mailer to attach a script to a message that the recipient simply  double-clicks to invoke. <indexterm significance="normal" id="archov-ix84" lang="en"><primary lang="en">Mailer</primary></indexterm> <indexterm significance="normal" id="archov-ix85" lang="en"><primary lang="en">graphical user interface engine</primary><secondary lang="en">Desktop KornShell</secondary></indexterm><indexterm significance="normal" id="archov-ix86" lang="en"><primary lang="en">Desktop KornShell (dtksh)</primary></indexterm></para></listitem></itemizedlist></sect2><sect2 id="archov-13" lang="en"><title lang="en">GUI Construction</title><para lang="en">The easiest way to produce your first Common Desktop Environment application, and perhaps the fastest, is to do almost no Motif toolkit programming at all. Use the Common Desktop Environment Application Builder, also known as App Builder, to construct the GUI control portion of your application. App Builder focuses  on making default widget behavior easy to access. It does this by hiding many  of the more esoteric resources that are available on most widgets. App Builder  also makes it as easy to incorporate desktop integration infrastructure into  your application, including drag and drop, session management, and ToolTalk  messaging.<indexterm significance="normal" id="archov-ix87" lang="en"><primary lang="en">graphical user interface engine</primary><secondary lang="en">Application Builder</secondary></indexterm><indexterm significance="normal" id="archov-ix88" lang="en"><primary lang="en">Application Builder</primary></indexterm></para><tip lang="en"><gentext type="text">Tip - </gentext><para lang="en">App Builder is a good learning tool. A full-featured Motif GUI builder called XDesigner is available for purchase from the Sun Microsystems Advanced Developer Tools organization.</para></tip><para lang="en">App Builder maintains the user interface state in Builder Interface  Language (BIL) files. A code generator takes the BIL files and produces Motif  toolkit code. App Builder can also generate User Interface Language (UIL)  files.<indexterm significance="normal" id="archov-ix89" lang="en"><primary lang="en">Builder Interface Language (BIL)</primary></indexterm><indexterm significance="normal" id="archov-ix90" lang="en"><primary lang="en">User Interface Language (UIL)</primary></indexterm></para><para lang="en">As you make changes to your application's user interface, App  Builder merges your custom code with the code it generates. Generated code is  a good source of example code, even if you do not using App Builder to  maintain your application's GUI state. </para><para lang="en">In addition, nonprogrammers can use App Builder to produce an  application GUI prototype. The prototype can roll forward to programmers for  the production phase of  development.<indexterm significance="normal" id="archov-ix91" lang="en"><primary lang="en">graphical user interface engine</primary><secondary lang="en">Application Builder</secondary></indexterm><indexterm significance="normal" id="archov-ix92" lang="en"><primary lang="en">Application Builder</primary></indexterm></para></sect2></sect1><sect1 id="archov-85415" lang="en"><title lang="en">Integration Technologies</title><para lang="en">Common Desktop Environment technologies discussed thus far have been  directly involved with putting a GUI onto the screen. The integration  technologies described in this section are underlying infrastructure, not GUI  providers.</para><sect2 id="archov-14" lang="en"><title lang="en">Process Execution</title><indexterm significance="normal" id="archov-ix93" lang="en"><primary lang="en">integration technologies</primary><secondary lang="en">process execution</secondary></indexterm><indexterm significance="normal" id="archov-ix94" lang="en"><primary lang="en">process execution</primary></indexterm><para lang="en">To provide a network-leveraging environment, the Common Desktop  Environment provides the Sub Process Control (SPC) mechanism to start, manage,  and collect results from applications running on a remote host. A remote host  installs an SPC daemon that serves as the remote end of a socket-based control  mechanism. This control mechanism tries to maintain the illusion that the  remote process is a local <emphasis lang="en">child</emphasis> to the  <emphasis lang="en">parent</emphasis> process. Authentication of the user that owns the  parent process is based upon the ability of the parent process to write a  <literal moreinfo="none" lang="en">setuid</literal> file to the user's home directory  <emphasis lang="en">and</emphasis> the ability of the child process to read the  result.<indexterm significance="normal" id="archov-ix95" lang="en"><primary lang="en">Sub Process Control (SPC)</primary></indexterm></para><para lang="en">The SPC API and associated control programs are private to the Common  Desktop Environment. Actions represent the public API for running applications  remotely.</para></sect2><sect2 id="archov-15" lang="en"><title lang="en">Application Messaging</title><indexterm significance="normal" id="archov-ix96" lang="en"><primary lang="en">integration technologies</primary><secondary lang="en">application messaging</secondary></indexterm><indexterm significance="normal" id="archov-ix97" lang="en"><primary lang="en">ToolTalk Messaging Service</primary></indexterm><para lang="en">The ToolTalk Messaging Service is the application messaging mechanism  for the Common Desktop Environment. Application messaging addresses  inter-application control and cooperation for applications working on behalf  of a single user. The ToolTalk session daemon is a local message-routing  process whose control scope typically corresponds to that of the X server.  This means that clients within a session issue requests, the ToolTalk session  manager finds or starts some client within a session that is able to handle  the request, and the ToolTalk session daemon tracks the request until  completion. </para><para lang="en">The desktop provides two standard ToolTalk protocols known as  <emphasis lang="en">messages sets</emphasis>. A message set contains a number of  messages that can be exchanged between a sender and a handler process. These  messages are grouped together because they describe related requests and  notices. The sender and recipient may be within the same process or on  different hosts. Message sets have associated utility functions that allow you  to concentrate on the semantics of the protocol without getting involved in  the low-level messaging details. Some of the message set functions enable you  to defer to default behavior with almost no work on your part. </para><sect3 id="archov-16" lang="en"><title lang="en">Desktop Message Set</title><para lang="en">The Desktop Message Set encompasses three areas. The first is windowing  behavior. The second involves file access and short term file life cycle  control. The third is specific to applications that have extension languages  and is not generic enough to warrant library support.</para></sect3><sect3 id="archov-17" lang="en"><title lang="en">Media Message Set</title><para lang="en">The Media Message Set allows an application to be a container for  arbitrary media, or to be a media player/editor that can be driven from such a  container. The Media message interface allows a container application (such as  Mailer or File Manager) to compose, display, edit, or print a file or buffer  of an arbitrary media type, without understanding anything about the format of  that media type. ToolTalk routes a container's requests to the user's  preferred tool for the given media type and operation. This includes routing  the request to an already-running instance of the tool if that instance can  best handle the request. <indexterm significance="normal" id="archov-ix98" lang="en"><primary lang="en">Mailer</primary></indexterm> <indexterm significance="normal" id="archov-ix99" lang="en"><primary lang="en">File Manager</primary></indexterm> <indexterm significance="normal" id="archov-ix100" lang="en"><primary lang="en">integration technologies</primary><secondary lang="en">application messaging</secondary></indexterm> <indexterm significance="normal" id="archov-ix101" lang="en"><primary lang="en">ToolTalk Messaging Service</primary></indexterm></para></sect3></sect2><sect2 id="archov-18" lang="en"><title lang="en">Data Typing</title><indexterm significance="normal" id="archov-ix102" lang="en"><primary lang="en">data typing</primary></indexterm><para lang="en">The Common Desktop Environment provides a uniform user interface to the  objects contained on the desktop. To do this, the desktop has a mechanism,  called data typing, to determine an object's type using a set of  criteria. The criteria includes properties potentially shared by file-based  and buffer-based objects such as name pattern and content pattern. Other  criteria are exclusive to files, and include path-name pattern and file  permissions. Associated with every desktop type is an extensible set of  attributes, including icon name, name template pattern, list of actions  suitable for presentation to a user, equivalent type names for other type  spaces (for example, MIME type), and a textual description of this type. The  <emphasis lang="en">actions and data-types database</emphasis> stores
data criteria and  data attributes.</para><para lang="en">The Common Desktop Environment defines, and platform vendors supply, a  set of desktop type definitions. Your application should augment the database  with both proprietary and public data types at application installation  time.</para><para lang="en">Information is extracted from the actions and data-types through a  Common Desktop Environment library API. The data typing API matches an  object's properties with the database type criteria to determine the object's  desktop type. The matching algorithm uses a set of precedence rules to resolve  conflicts.</para><para lang="en">The Common Desktop Environment type space is defined by the X/Open  Common Desktop Environment standard and exists primarily to support  desktop-oriented activities such as icon display and action association. The  MIME type space is defined by the Internet Engineering Task Force and exists  to deal with exchange of mail message parts. A ToolTalk media type space  exists in order to match data with handlers, and is a subset of X selection  target types defined by the X Consortium. Thus, to do a complete job of type  definition, you have to define a Common Desktop Environment type, X selection  target, and MIME type. For private Common Desktop Environment types, append  the type name to an organization's name. This partitions the name space  without need for centralized allocation of types.
The Common Desktop  Environment claims the <emphasis lang="en">Dt</emphasis> prefix, for  <emphasis lang="en">Desktop</emphasis>.<indexterm significance="normal" id="archov-ix103" lang="en"><primary lang="en">data typing</primary></indexterm></para></sect2><sect2 id="archov-35581" lang="en"><title lang="en">Method Invocation</title><indexterm significance="normal" id="archov-ix104" lang="en"><primary lang="en">actions</primary></indexterm><para lang="en">A Common Desktop Environment type can be thought of as the class of a  desktop object. Using this analogy, actions can be thought of as the methods  available on instances of a class. Thus, the actions attribute in a type  attribute list describes operations that are available for the type. A single  action in the actions and data-types database has multiple parts, many of  which are optional. These parts  include:<indexterm significance="normal" id="archov-ix105" lang="en"><primary lang="en">methods, and actions</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">A description of how to invoke the operation: for example, through  ToolTalk, through an execution string passed to the SPC mechanism, from within  a terminal emulator, and so on.</para></listitem><listitem lang="en"><para lang="en">A description of the type of arguments associated with the action. The  type of the desktop objects (files and buffers) that it accepts is defined by  the actions and data-types database. Actions are polymorphic with respect to  data types. For example, the Open action invokes a text editor for arguments  that are text files and a graphics editor for arguments that are graphics  files.</para></listitem><listitem lang="en"><para lang="en">A description of the number of arguments, if any, associated with the  action. </para></listitem><listitem lang="en"><para lang="en">An optional indication as to where to carry out the operation: the local  machine, a particular remote machine, the machine on which the executable  resides, and so on. In addition, these execution locations can be included in  a list so that if a host is not available then the next host on the list is  tried. This provides a measure of redundancy that can be used to increase the  likelihood of application launch, even in the face of remote host  unavailability. Thus, actions provide network distribution guidance,  implemented either through built-in ToolTalk facilities or through the SPC  mechanism directly.</para></listitem><listitem lang="en"><para lang="en">An optional label, help string, and icon that the user sees when  interacting with the action's GUI. These are hints to an application about how  to represent the action to the user. These hints may be ignored, as the Front  Panel does by ignoring the icon if the Front Panel configuration file supplies  an alternative icon.</para></listitem></itemizedlist><para lang="en">The collection of actions available to the user is assembled at the same  time as the system is collecting type database information. In fact, related  action and type information usually reside together in the same file.  Desktop-defined, system-administrator-defined (host-specific), and  user-defined files are assembled in order into a single (actions and  data-types) database, with later definitions taking precedence. This ordering  of search path precedence and traversal is used elsewhere by the desktop for  such things as help volume and icon file searches.</para><para lang="en">The actions and data-types database and the File Manager use action  files to instantiate actions as file system objects that can be viewed,  invoked, moved, copied, and so on. The database contains references to an  action's implementation (for example "run  <literal moreinfo="none" lang="en">/usr/bin/app</literal> on machine  <literal moreinfo="none" lang="en">net_app_svr</literal>"). However, a representation is needed of  an action as an object that the user can directly manipulate. This is achieved  by using an object's name, which identifies it as an action to any object  manager that is looking for actions. Thus, if there is an executable file  named <literal moreinfo="none" lang="en">Dtstyle</literal> and an action named Dtstyle, the File Manager  will interpret that file, regardless of its content, as the Dtstyle action  reference. In addition,
the File Manager uses the action's label as the  name that the user sees for this file. Action labels are localizable, whereas  action names are programmatic entities that should not be  localized.<indexterm significance="normal" id="archov-ix106" lang="en"><primary lang="en">database</primary></indexterm></para><para lang="en">The good feature about using files simply as pointers into the actions  and data-types database is that the underlying implementation can evolve  without the user having to do anything. However, one user's actions and  data-types database may not match another user's actions and data-types  database. Thus, a user cannot exchange an action reference, for example as a  mail message attachment, and expect another person to have a comparable  definition for that action. Exchanging a Desktop Korn shell script is the best  solution to this problem.</para><para lang="en">Actions are useful because they integrate both legacy command-line  applications and ToolTalk applications into the desktop as polymorphic,  distributed operations on desktop  objects.<indexterm significance="normal" id="archov-ix107" lang="en"><primary lang="en">actions</primary></indexterm></para></sect2></sect1></chapter></part><part id="part2-1" lang="en"><gentext type="text">Part II</gentext><gentext type="toc">Part II Development Environment Overview</gentext><title lang="en">Development Environment Overview</title><partintro lang="en" role="no-manpages"><para lang="en"/></partintro><chapter id="consid-55236" lang="en"><gentext type="text">Chapter 2</gentext><gentext type="toc">2.  Development Environment Considerations</gentext><title lang="en">Development Environment Considerations</title><highlights lang="en"><para lang="en">This chapter discusses general information you should know before  starting to use the Common Desktop Environment application program interfaces  (APIs). </para><para lang="en">Before you integrate your application into the desktop, you should have  a basic understanding of how the desktop works. Install the Common Desktop  Environment on your platform and familiarize yourself with its features. For  an introduction to the desktop, see the  <olink targetpartnumber="805-3899"><citetitle lang="en">Solaris Common Desktop Environment: User's Guide</citetitle></olink> or the <citetitle lang="en">Desktop  Introduction</citetitle> online help volume.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"><link linkend="consid-18853" lang="en">"Common Desktop Environment Characteristics"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="consid-27789" lang="en">"Underlying Foundations"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="consid-1" lang="en">"Running Existing Applications"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="consid-3" lang="en">"Libraries and Header Files"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="consid-4" lang="en">"Demo Programs"</link></para></listitem><listitem lang="en"><para lang="en"><link linkend="consid-11652" lang="en">"Man Pages"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="consid-6" lang="en">"Development Environment Directory Structure"</link></para></listitem></itemizedlist></highlights><sect1 id="consid-18853" lang="en"><title lang="en">Common Desktop Environment Characteristics</title><para lang="en">The Common Desktop Environment provides a productive and comfortable  desktop environment for UNIX users. As you develop your application, keep in  mind the experience that the Common Desktop Environment delivers to its users.  Develop your application with the following characteristics in mind, to help  make it a powerful, consistent, and predictable part of the Common Desktop  Environment: <indexterm significance="normal" id="consid-ix108" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">application development</secondary></indexterm> <indexterm significance="normal" id="consid-ix109" lang="en"><primary lang="en">goals for desktop look and feel</primary></indexterm> <indexterm significance="normal" id="consid-ix110" lang="en"><primary lang="en">application development</primary><secondary lang="en">guidelines</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Hide the complexities of UNIX.  <indexterm significance="normal" id="consid-ix111" lang="en"><primary lang="en">UNIX</primary></indexterm></para><para lang="en">Because the Common Desktop Environment targets end users as its primary  customers, providing an application that hides UNIX as much as possible is a  key ingredient to a successful product. </para></listitem><listitem lang="en"><para lang="en">Provide a common look and  feel.<indexterm significance="normal" id="consid-ix112" lang="en"><primary lang="en">look and feel</primary></indexterm></para><para lang="en">Successful applications in the Common Desktop Environment share  look-and-feel characteristics with other applications on the desktop. Follow  the style and other guidelines (such as the Common Desktop Environment  standard font names) so that your application encompasses the Common Desktop  Environment Motif look and feel.</para></listitem><listitem lang="en"><para lang="en">Make applications easy to  use.<indexterm significance="normal" id="consid-ix113" lang="en"><primary lang="en">ease of use</primary></indexterm></para><para lang="en">Provide an easily readable default font size, and provide keyboard  accelerators for mouse-oriented actions. Use the desktop online help component  to integrate a complete Help system into your application. Basic computer  interaction styles should be consistent across platforms wherever  possible.</para></listitem><listitem lang="en"><para lang="en">Take advantage of desktop integration  services.<indexterm significance="normal" id="consid-ix114" lang="en"><primary lang="en">desktop</primary><secondary lang="en">integration services</secondary></indexterm><indexterm significance="normal" id="consid-ix115" lang="en"><primary lang="en">integration</primary><secondary lang="en">services, desktop</secondary></indexterm><indexterm significance="normal" id="consid-ix116" lang="en"><primary lang="en">services, desktop integration</primary></indexterm></para><para lang="en">The Common Desktop Environment provides a set of desktop integration  services that enable applications to be well-integrated into the desktop.  Users benefit because they do not have to know whether an application is  running on a local machine or somewhere on the network, or which toolkit (if  any) was used to write the application they are running. Provide mechanisms in  your application that enable it to be launched from the desktop and to  communicate with other Common Desktop Environment applications. Use the online  Help system to provide users with quick information. Use drag and drop to  provide users with a more predictable way to use their systems.</para></listitem><listitem lang="en"><para lang="en">Design for individual and cultural differences.</para><para lang="en">By following the Common Desktop Environment conventions and policies,  your application will naturally provide for smooth, consistent, and  appropriate customization  of:<indexterm significance="normal" id="consid-ix117" lang="en"><primary lang="en">customization</primary><secondary lang="en">of desktop</secondary></indexterm><indexterm significance="normal" id="consid-ix118" lang="en"><primary lang="en">desktop</primary><secondary lang="en">customization</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Fonts</para></listitem><listitem lang="en"><para lang="en">Color</para></listitem><listitem lang="en"><para lang="en">Keyboard and mouse bindings</para></listitem><listitem lang="en"><para lang="en">Locale-specific configuration files</para></listitem></itemizedlist><para lang="en">For more about locale-specific configuration files, see the localization  section of the <olink targetpartnumber="805-3900"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System Administrator's Guide</citetitle></olink>.<indexterm significance="normal" id="consid-ix119" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">for application development</secondary></indexterm><indexterm significance="normal" id="consid-ix120" lang="en"><primary lang="en">goals for desktop look and feel</primary></indexterm><indexterm significance="normal" id="consid-ix121" lang="en"><primary lang="en">application development</primary><secondary lang="en">guidelines</secondary></indexterm></para></listitem></itemizedlist></sect1><sect1 id="consid-27789" lang="en"><title lang="en">Underlying Foundations</title><para lang="en">To compile an application that uses the desktop APIs, you  need:<indexterm significance="normal" id="consid-ix122" lang="en"><primary lang="en">compiling</primary><secondary lang="en">an application</secondary></indexterm><indexterm significance="normal" id="consid-ix123" lang="en"><primary lang="en">software requirements, for application development</primary></indexterm><indexterm significance="normal" id="consid-ix124" lang="en"><primary lang="en">requirements (software), for application development</primary></indexterm><indexterm significance="normal" id="consid-ix125" lang="en"><primary lang="en">application development</primary><secondary lang="en">required software</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Common Desktop Environment header files and libraries </para></listitem><listitem lang="en"><para lang="en">X11R5 or later header files and  libraries<indexterm significance="normal" id="consid-ix126" lang="en"><primary lang="en">X11R5</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">ANSI C compiler; or C++ compiler, version 2.0 or later, if you are  developing a C++  application<indexterm significance="normal" id="consid-ix127" lang="en"><primary lang="en">compilers, used for application development</primary></indexterm><indexterm significance="normal" id="consid-ix128" lang="en"><primary lang="en">ANSI C</primary></indexterm><indexterm significance="normal" id="consid-ix129" lang="en"><primary lang="en">C++</primary></indexterm></para></listitem></itemizedlist><para lang="en">The resulting binary file must be run in an environment in which  matching libraries are installed. The run-time libraries are in  <filename moreinfo="none" lang="en">/usr/dt/lib</filename>, and they include the directories listed in <link linkend="consid-tbl-7" lang="en">Table 2-2</link>.</para><para lang="en">To run properly, Common Desktop Environment-based applications require  an environment in which some files from the following run-time directories are  installed:<indexterm significance="normal" id="consid-ix130" lang="en"><primary lang="en">run-time</primary><secondary lang="en">directories, and running applications</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">/etc/dt/*</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">/var/dt/*</filename></para></listitem><listitem lang="en"><para lang="en">The following subdirectories of <filename moreinfo="none" lang="en">/usr/dt</filename>: </para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">app-defaults</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">appconfig</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">bin</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">dthelp</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">lib</filename></para></listitem></itemizedlist></listitem></itemizedlist><para lang="en">Your application should depend on only those run-time files  <emphasis lang="en">explicitly</emphasis> mentioned in the X/Open XCDE standard. It  should <emphasis lang="en">not</emphasis> depend on files not mentioned in the standard;  for example, <filename moreinfo="none" lang="en">/usr/dt/appconfig/icons</filename>. If you build such  dependencies into your application, it should be robust enough to run in an  environment in which such files are missing or have changed.</para><para lang="en">For a listing of the minimum run-time environment required to run a  Common Desktop Environment application, see the <literal moreinfo="none" lang="en">dtfilsys(5)</literal>  man page.</para><para lang="en">The run-time environment includes Common Desktop Environment Motif,  which is Motif 2.1 with bug fixes and enhancements. (For a description of  these enhancements, see <link linkend="motifapp-53739" lang="en">Appendix A, Common Desktop Environment Motif</link>  .) For more information on the Common Desktop Environment run-time  environment, see the run-time documentation  set.<indexterm significance="normal" id="consid-ix131" lang="en"><primary lang="en">run-time</primary><secondary lang="en">environment</secondary></indexterm></para></sect1><sect1 id="consid-1" lang="en"><title lang="en">Running Existing Applications</title><indexterm significance="normal" id="consid-ix132" lang="en"><primary lang="en">applications, running existing</primary></indexterm><indexterm significance="normal" id="consid-ix133" lang="en"><primary lang="en">existing applications, and Common Desktop Environment</primary></indexterm><para lang="en">Existing X Window System-based applications that are  not compiled with any Common Desktop Environment libraries run under the  desktop window manager (<literal moreinfo="none" lang="en">dtwm</literal>) similarly to the way they run  under the Motif window manager: they still work. The level of interoperability  with the Common Desktop Environment follows these  guidelines.<indexterm significance="normal" id="consid-ix134" lang="en"><primary lang="en">X-based applications</primary></indexterm></para><table frame="topbot" id="consid-tbl-2" lang="en"><gentext type="text">Table 2-1 </gentext><title lang="en">Interoperability of Existing X-Based Applications with the  Common  Desktop Environment</title><tgroup cols="2" colsep="0" rowsep="0" lang="en"><colspec colname="column1" colwidth="231*"/><colspec colname="column2" colwidth="165*"/><thead lang="en"><row rowsep="1" lang="en"><entry align="left" valign="bottom" lang="en"><para lang="en">Characteristics of  Existing X-based Applications</para></entry><entry align="left" valign="bottom" lang="en"><para lang="en">Interoperability  Status with Desktop</para></entry></row></thead><tbody lang="en"><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en">Motif 1.2 (and later)  drag and drop (using preregister protocol)</para></entry><entry align="left" valign="top" lang="en"><para lang="en">Yes</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en">Motif 1.2 (and later)  drag and drop (using dynamic protocol)</para></entry><entry align="left" valign="top" lang="en"><para lang="en">No<footnote id="consid-fn1" lang="en"><para lang="en">This is a Motif 1.2 drag-and-drop dynamic protocol interoperability  problem, and it is <emphasis lang="en">not</emphasis> due to the Common Desktop  Environment.</para></footnote></para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en">Cut and paste (all  applications)</para></entry><entry align="left" valign="top" lang="en"><para lang="en">Yes </para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en">OPEN LOOK drag and  drop</para></entry><entry align="left" valign="top" lang="en"><para lang="en">Yes (except  multiple-item </para><para lang="en">drag and drop)<footnote id="consid-fn2" lang="en"><para lang="en">This is implemented through a protocol translation mechanism in the drop  site database manager (<literal moreinfo="none" lang="en">dsdm</literal>).</para></footnote></para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en">ToolTalk Media  Exchange and Desktop protocols</para></entry><entry align="left" valign="top" lang="en"><para lang="en">Yes</para></entry></row></tbody></tgroup></table><para lang="en">If you want to recompile and relink an existing Motif application with  the Common Desktop Environment Motif shared libraries, the application must be  compatible with Motif 1.2.<indexterm significance="normal" id="consid-ix135" lang="en"><primary lang="en">Motif 1.2</primary></indexterm></para></sect1><sect1 id="consid-3" lang="en"><title lang="en">Libraries and Header Files</title><indexterm significance="normal" id="consid-ix136" lang="en"><primary lang="en">libraries, development environment</primary></indexterm><indexterm significance="normal" id="consid-ix137" lang="en"><primary lang="en">header files, development environment</primary></indexterm><para lang="en">Compile Common Desktop Environment applications  against X11R5 header files and libraries, which reside in vendor-specific  locations. <link linkend="consid-tbl-7" lang="en">Table 2-2</link> lists the locations of all development environment libraries and header  files, as subdirectories of <filename moreinfo="none" lang="en">/usr/dt</filename>. </para></sect1><sect1 id="consid-4" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="consid-ix138" lang="en"><primary lang="en">demo programs</primary></indexterm><indexterm significance="normal" id="consid-ix139" lang="en"><primary lang="en">sample programs</primary></indexterm><indexterm significance="normal" id="consid-ix140" lang="en"><primary lang="en">example programs</primary></indexterm><indexterm significance="normal" id="consid-ix141" lang="en"><primary lang="en">programs, demo</primary></indexterm><para lang="en">The <filename moreinfo="none" lang="en">/usr/dt/examples</filename>  subdirectories contain source code for development environment component  demos, as well as a <emphasis lang="en">template</emphasis> application. See <link linkend="consid-tbl-7" lang="en">Table 2-2</link> for a listing of all demo subdirectories.</para><para lang="en">Each demo subdirectory contains source files for one or more demo  programs, along with makefiles for the programs. It also contains a  <literal moreinfo="none" lang="en">README</literal> file that describes the demos. </para><para lang="en">The demo whose source is in the <literal moreinfo="none" lang="en">template</literal> subdirectory  is a simple drawing program. This demo illustrates the basic structure of a  Common Desktop Environment application that is integrated with the desktop. It  is internationalized and contains all localized components in a separate  subdirectory. You can use the drawing program source as a template for your  application. </para></sect1><sect1 id="consid-11652" lang="en"><title lang="en">Man Pages</title><para lang="en">The Common Desktop Environment man pages reside in  <filename moreinfo="none" lang="en">/usr/dt/man</filename>. To view them using either the  <command moreinfo="none" lang="en">man()</command> command or the desktop man page viewer, you must add  <filename moreinfo="none" lang="en">/usr/dt/man</filename> to the <literal moreinfo="none" lang="en">MANPATH</literal> environment  variable. For example, in your <filename moreinfo="none" lang="en">~/.dtprofile</filename> file,  set:</para><programlisting format="linespecific" lang="en" role="fragment">MANPATH =

$MANPATH:/usr/dt/man</programlisting><para lang="en">For a listing of the <filename moreinfo="none" lang="en">/usr/dt/man</filename> subdirectories and  contents, see <link linkend="consid-tbl-7" lang="en">Table 2-2</link>. For more information on the <command moreinfo="none" lang="en">man()</command> command, see the  <literal moreinfo="none" lang="en">man(1)</literal> man page.</para></sect1><sect1 id="consid-6" lang="en"><title lang="en">Development Environment Directory Structure</title><indexterm significance="normal" id="indexterm-2" lang="en"><primary lang="en">directory structure</primary></indexterm><para lang="en"><link linkend="consid-tbl-7" lang="en">Table 2-2</link> lists the top-level directories in the development environment directory  structure and lists their subdirectories. (All of the top-level directory  names are prefixed by <filename moreinfo="none" lang="en">/usr/dt</filename>.)</para><table frame="topbot" id="consid-tbl-7" lang="en"><gentext type="text">Table 2-2 </gentext><title lang="en">Development Environment Directories in /usr/dt</title><tgroup cols="3" colsep="0" rowsep="0" lang="en"><colspec colname="column1" colwidth="72*"/><colspec colname="column2" colwidth="108*"/><colspec colname="column3" colwidth="216*"/><thead lang="en"><row rowsep="1" lang="en"><entry align="left" valign="bottom" lang="en"><para lang="en">Directory</para></entry><entry align="left" valign="bottom" lang="en"><para lang="en">Subdirectory</para></entry><entry align="left" valign="bottom" lang="en"><para lang="en">Contents</para></entry></row></thead><tbody lang="en"><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">examples</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en">Subdirectories that  contain source code for development environment component demo  programs</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en">README  file</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtaction</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Action invocation API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtbuilder</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Application Builder  examples</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtcalendar</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Calendar API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtdnd</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Drag-and-drop API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtdts</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Data-typing API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dthelp</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Help API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtksh</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtksh</filename>
 example scripts</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtsession</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Session Manager API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtterm</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Terminal Emulator  widget API demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtwidget</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Common Desktop  Environment Motif widgets demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">dtwsm</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Workspace Manager API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">template</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Template Common  Desktop Environment application</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">motif</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Motif 1.2 API  demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">motif/clipboard</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">XmClipboard</literal>  API demo</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">motif/dogs</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Widget binary  compatibility mechanism demo</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">motif/draganddrop</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Motif 1.2  drag-and-drop API demo</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">motif/periodic</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Motif widgets  demo</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">tt</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">ToolTalk Messaging  Service demos</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">include</filename><indexterm significance="normal" id="consid-ix143" lang="en"><primary lang="en">header files</primary></indexterm></para></entry><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en">Development  environment library header files</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">csa</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Calendar header  files</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dt</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Header files for  <literal moreinfo="none" lang="en">DtSvc</literal>, <literal moreinfo="none" lang="en">DtWidget</literal>,  <literal moreinfo="none" lang="en">DtHelp</literal>,  and</para><para lang="en"><literal moreinfo="none" lang="en">DtTerm</literal></para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Mrm</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Motif 1.2 resource  manager header files</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Tt</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">ToolTalk Messaging  Service header files</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Xm</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Motif 1.2 toolkit  header files</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">uil</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Motif 1.2-callable  UIL compiler header files</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">lib</filename><indexterm significance="normal" id="consid-ix144" lang="en"><primary lang="en">libraries, development environment</primary></indexterm></para></entry><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en">Library files for  <literal moreinfo="none" lang="en">libcsa</literal> (Calendar), </para><para lang="en"><literal moreinfo="none" lang="en">libDtHelp</literal> (Help system), </para><para lang="en"><literal moreinfo="none" lang="en">libDtSvc</literal> (actions, data typing, drag and drop,  Session Manager, Workspace Manager), </para><para lang="en"><literal moreinfo="none" lang="en">libDtTerm</literal>  (Terminal Emulator), </para><para lang="en"><literal moreinfo="none" lang="en">libDtWidget</literal> (Common  Desktop Environment Motif control and editor widgets), </para><para lang="en"><literal moreinfo="none" lang="en">libMrm</literal> (Motif 1.2 resource manager), </para><para lang="en"><literal moreinfo="none" lang="en">libUil</literal> (Motif 1.2-callable UIL compiler), </para><para lang="en"><literal moreinfo="none" lang="en">libXm</literal> (Motif 1.2 toolkit), </para><para lang="en"><literal moreinfo="none" lang="en">libtt</literal> (ToolTalk)</para><para lang="en"><literal moreinfo="none" lang="en">sparcv9</literal> (a subdirectory containing 64-bit versions of all the libraries in the lib sudirectory)</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">man</filename><indexterm significance="normal" id="consid-ix145" lang="en"><primary lang="en">man pages</primary></indexterm></para></entry><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en">Development  environment man pages</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">man1</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Client and utility  man pages</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">man3</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">API man  pages</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">man4</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Data  formats</para></entry></row><row lang="en"><entry align="left" valign="top" lang="en"><para lang="en"/></entry><entry align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">man5</filename></para></entry><entry align="left" valign="top" lang="en"><para lang="en">Header file and  action man pages<indexterm significance="normal" id="consid-ix146" lang="en"><primary lang="en">directory structure</primary></indexterm></para></entry></row></tbody></tgroup></table><sect2 id="consid-8" lang="en"><title lang="en">64-bit Libraries</title><indexterm significance="normal" id="indexterm-3" lang="en"><primary lang="en">libraries</primary><secondary lang="en">64-bit</secondary></indexterm><indexterm significance="normal" id="indexterm-4" lang="en"><primary lang="en">64-bit libraries</primary></indexterm><indexterm significance="normal" id="indexterm-5" lang="en"><primary lang="en">applications</primary><secondary lang="en">developing 64-bit</secondary></indexterm><para lang="en">The libraries listed under the <filename moreinfo="none" lang="en">lib</filename> subdirectory are available in 64-bit versions in the <filename moreinfo="none" lang="en">sparcv9</filename> subdirectory (see <link linkend="consid-tbl-7" lang="en">Table 2-2</link>). These libraries enable the development of 64-bit applications for CDE.</para></sect2></sect1></chapter><chapter id="devapplic-28071" lang="en"><gentext type="text">Chapter 3</gentext><gentext type="toc">3.  Developing an Application</gentext><title lang="en">Developing an Application</title><highlights lang="en"><para lang="en">This chapter presents information specific to developing a Common  Desktop Environment application, such as naming conventions and other  guidelines. It introduces levels of integration, which are the guidelines for  determining the desktop functionality to incorporate into your application to  make it increasingly integrated with the desktop. It also provides an overview  of the Application Builder, a tool to simplify Common Desktop Environment  application development.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"><link linkend="devapplic-1" lang="en">"Levels of Desktop Integration"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="devapplic-2" lang="en">"Desktop Naming Conventions"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="devapplic-3" lang="en">"Public and Private Interfaces"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="devapplic-25286" lang="en">"Guidelines for Common Desktop Environment Databases"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="devapplic-4" lang="en">"Application Initialization and libDtSvc"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="devapplic-5" lang="en">"Application Builder"</link> </para></listitem></itemizedlist></highlights><sect1 id="devapplic-1" lang="en"><title lang="en">Levels of Desktop Integration</title><indexterm significance="normal" id="devapplic-ix147" lang="en"><primary lang="en">desktop</primary><secondary lang="en">integration, levels of</secondary></indexterm><indexterm significance="normal" id="devapplic-ix148" lang="en"><primary lang="en">integration</primary><secondary lang="en">levels of</secondary></indexterm><indexterm significance="normal" id="devapplic-ix149" lang="en"><primary lang="en">application development</primary><secondary lang="en">levels of integration</secondary></indexterm><para lang="en">Users can run any X11-based application from a  shell command line in the Common Desktop Environment. If you want to integrate  your application into the desktop, however, there are guidelines for you to  follow. The Common Desktop Environment defines three levels of integration to  give you maximum flexibility in designing your application or porting an  existing application: <indexterm significance="normal" id="devapplic-ix150" lang="en"><primary lang="en">X-based applications</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><emphasis lang="en">Basic Integration</emphasis>--Enables your application to  be launched from the desktop. You do <emphasis lang="en">not</emphasis> need to change  your application code to perform basic integration. See <link linkend="basicinteg-27679" lang="en">Chapter 5, Basic Application Integration					</link> for more information.<indexterm significance="normal" id="devapplic-ix151" lang="en"><primary lang="en">basic integration</primary></indexterm><indexterm significance="normal" id="devapplic-ix152" lang="en"><primary lang="en">levels of integration</primary><secondary lang="en">basic</secondary></indexterm></para></listitem><listitem lang="en"><para lang="en"><emphasis lang="en">Recommended Integration</emphasis>--Enables your  application to enhance its level of consistency with the desktop. See <link linkend="recinteg-88933" lang="en">Chapter 6, Recommended Integration</link> for more information.<indexterm significance="normal" id="devapplic-ix153" lang="en"><primary lang="en">recommended integration</primary></indexterm><indexterm significance="normal" id="devapplic-ix154" lang="en"><primary lang="en">levels of integration</primary><secondary lang="en">recommended</secondary></indexterm></para></listitem><listitem lang="en"><para lang="en"><emphasis lang="en">Optional Integration</emphasis>--Enables you to leverage  services provided by the desktop for achieving specialized tasks. See <link linkend="optinteg-74877" lang="en">Chapter 7, Optional Integration</link> for more  information.<indexterm significance="normal" id="devapplic-ix155" lang="en"><primary lang="en">optional integration</primary></indexterm><indexterm significance="normal" id="devapplic-ix156" lang="en"><primary lang="en">levels of integration</primary><secondary lang="en">optional</secondary></indexterm></para></listitem></itemizedlist><para lang="en">For more information on all three levels of integration, see the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>. Basic Integration is also discussed in the  <olink targetpartnumber="805-3900"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System Administrator's Guide</citetitle></olink>.</para></sect1><sect1 id="devapplic-2" lang="en"><title lang="en">Desktop Naming Conventions</title><indexterm significance="normal" id="devapplic-ix157" lang="en"><primary lang="en">desktop</primary><secondary lang="en">naming conventions</secondary></indexterm><indexterm significance="normal" id="devapplic-ix158" lang="en"><primary lang="en">naming conventions</primary><secondary lang="en">desktop</secondary></indexterm><indexterm significance="normal" id="devapplic-ix159" lang="en"><primary lang="en">conventions, desktop naming</primary></indexterm><indexterm significance="normal" id="devapplic-ix160" lang="en"><primary lang="en">application development</primary><secondary lang="en">desktop naming conventions</secondary></indexterm><para lang="en">The Common Desktop Environment uses naming  conventions similar to those used by X and Motif. Desktop clients, desktop  libraries, and other desktop components share a common prefix for externally  visible names: <literal moreinfo="none" lang="en">dt</literal>, <literal moreinfo="none" lang="en">Dt</literal>, or  <literal moreinfo="none" lang="en">DT</literal>. Private desktop structures, functions, and defines  (found in the Common Desktop Environment code; not for developer use) have an  <literal moreinfo="none" lang="en">_dt</literal>, <literal moreinfo="none" lang="en">_Dt</literal>, or <literal moreinfo="none" lang="en">_DT</literal>  prefix. <link linkend="devapplic-78458" lang="en">Table 3-1</link>   lists the desktop naming conventions.</para><table frame="topbot" id="devapplic-78458" lang="en"><gentext type="text">Table 3-1 </gentext><title lang="en">Desktop Naming Conventions</title><tgroup cols="3" colsep="0" rowsep="0" lang="en"><colspec colnum="1" colname="column1" colwidth="5*"/><colspec colnum="2" colname="column2" colwidth="2*"/><colspec colnum="3" colname="column3" colwidth="5*"/><thead lang="en"><row rowsep="1" lang="en"><entry colname="column1" align="left" valign="bottom" lang="en"><para lang="en">Name  		</para></entry><entry colname="column2" align="left" valign="bottom" lang="en"><para lang="en">Prefix</para></entry><entry colname="column3" align="left" valign="bottom" lang="en"><para lang="en">Example</para></entry></row></thead><tbody lang="en"><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Desktop clients and  utilities</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">dt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">dthelpview</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Resource names and  classes</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Dt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtNhelpType,  DtCHelpType</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Library  names</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Dt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtHelp</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Include  references</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Dt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">#include  &lt;Dt/Help.h&gt;</literal> </para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Public function  names</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Dt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtCreateHelpDialog </literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Public data structure  names</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Dt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtHelpDialogCallbackStruct</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Constant  names</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Dt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtHELP_NEW_WINDOW</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Environment  variables</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DT</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DTHELPSEARCHPATH</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Private desktop  symbols (structures, functions, defines)</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">_dt</literal>,  <literal moreinfo="none" lang="en">_Dt</literal>, <literal moreinfo="none" lang="en">_DT</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">_DtHelpFunction,  _DtHELP_DEFINE</literal></para></entry></row></tbody></tgroup></table><para lang="en"><link linkend="devapplic-67499" lang="en">Table 3-2</link>   lists the exceptions to the preceding naming conventions.</para><table frame="topbot" id="devapplic-67499" lang="en"><gentext type="text">Table 3-2 </gentext><title lang="en">Exceptions to Desktop Naming Conventions</title><tgroup cols="3" colsep="0" rowsep="0" lang="en"><colspec colnum="1" colname="column1" colwidth="5*"/><colspec colnum="2" colname="column2" colwidth="4*"/><colspec colnum="3" colname="column3" colwidth="4*"/><thead lang="en"><row rowsep="1" lang="en"><entry colname="column1" align="left" valign="bottom" lang="en"><para lang="en">Name</para></entry><entry colname="column2" align="left" valign="bottom" lang="en"><para lang="en">Prefix</para></entry><entry colname="column3" align="left" valign="bottom" lang="en"><para lang="en">Example</para></entry></row></thead><tbody lang="en"><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Common Desktop  Environment Motif<indexterm significance="normal" id="devapplic-ix161" lang="en"><primary lang="en">Motif</primary></indexterm></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Xm</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">XmCreateLabel</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">dtksh</literal>  Convenience Functions</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">Dtksh</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtkshAddButtons</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">ToolTalk Messaging  Service<indexterm significance="normal" id="devapplic-ix162" lang="en"><primary lang="en">ToolTalk Messaging Service</primary></indexterm></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">tt (for  functions)</literal></para><para lang="en">Tt (for typedefs)</para><para lang="en">TT (for  constants)</para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">tt_open</literal></para><para lang="en">Tt_message</para><para lang="en">TT_NOTICE</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">X11R5<indexterm significance="normal" id="devapplic-ix163" lang="en"><primary lang="en">X11R5</primary></indexterm></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">X</literal>,  <literal moreinfo="none" lang="en">Xt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">XOpenDisplay,  XtCreateWidget</literal></para></entry></row></tbody></tgroup></table><caution lang="en" role="caution"><gentext type="text">Caution - </gentext><para lang="en">Do<emphasis lang="en"> not</emphasis> use the prefixes <literal moreinfo="none" lang="en">dt</literal>,  <literal moreinfo="none" lang="en">Dt</literal>, <literal moreinfo="none" lang="en">DT</literal>, <literal moreinfo="none" lang="en">_dt</literal>,  <literal moreinfo="none" lang="en">_Dt</literal>, <literal moreinfo="none" lang="en">_DT</literal>, <literal moreinfo="none" lang="en">Xm</literal>,  <literal moreinfo="none" lang="en">tt</literal>, <literal moreinfo="none" lang="en">Tt</literal>, <literal moreinfo="none" lang="en">TT</literal>,  <literal moreinfo="none" lang="en">X</literal>, or <literal moreinfo="none" lang="en">Xt</literal> to define new symbols in your  application code. If you do, you might define one that has already been  defined--or might be defined in the future--in the Common Desktop  Environment, ToolTalk, X11R5, or Motif  code.<indexterm significance="normal" id="devapplic-ix164" lang="en"><primary lang="en">naming conventions</primary><secondary lang="en">caution notice</secondary></indexterm><indexterm significance="normal" id="devapplic-ix165" lang="en"><primary lang="en">desktop</primary><secondary lang="en">naming conventions</secondary></indexterm><indexterm significance="normal" id="devapplic-ix166" lang="en"><primary lang="en">naming conventions</primary><secondary lang="en">desktop</secondary></indexterm><indexterm significance="normal" id="devapplic-ix167" lang="en"><primary lang="en">conventions, desktop naming</primary></indexterm><indexterm significance="normal" id="devapplic-ix168" lang="en"><primary lang="en">application development</primary><secondary lang="en">desktop naming conventions</secondary></indexterm></para></caution></sect1><sect1 id="devapplic-3" lang="en"><title lang="en">Public and Private Interfaces</title><indexterm significance="normal" id="devapplic-ix169" lang="en"><primary lang="en">public interfaces</primary></indexterm><indexterm significance="normal" id="devapplic-ix170" lang="en"><primary lang="en">private interfaces</primary></indexterm><indexterm significance="normal" id="devapplic-ix171" lang="en"><primary lang="en">interfaces</primary><secondary lang="en">private</secondary></indexterm><indexterm significance="normal" id="devapplic-ix172" lang="en"><primary lang="en">interfaces</primary><secondary lang="en">public</secondary></indexterm><indexterm significance="normal" id="devapplic-ix173" lang="en"><primary lang="en">application development</primary><secondary lang="en">public and private interfaces</secondary></indexterm><para lang="en">If a Common Desktop Environment interface is  documented in the man pages or the Common Desktop Environment documentation  set, you can assume that the interface is public unless otherwise stated. An  interface is not necessarily public just because it has a header file  associated with it. Interfaces that are not documented are private to the  Common Desktop Environment and are subject to change without notice.</para></sect1><sect1 id="devapplic-25286" lang="en"><title lang="en">Guidelines for Common Desktop Environment Databases</title><indexterm significance="normal" id="devapplic-ix174" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">database syntax</secondary></indexterm><indexterm significance="normal" id="devapplic-ix175" lang="en"><primary lang="en">database</primary><secondary lang="en">syntax</secondary></indexterm><indexterm significance="normal" id="devapplic-ix176" lang="en"><primary lang="en">syntax, for databases</primary></indexterm><indexterm significance="normal" id="devapplic-ix177" lang="en"><primary lang="en">application development</primary><secondary lang="en">databases, guidelines for</secondary></indexterm><para lang="en">You can find the syntax for the desktop databases, such as those used  for actions and data types, in man pages located in the  <filename moreinfo="none" lang="en">/usr/dt/man/man4</filename> directory.</para><para lang="en">For more information on databases, see the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect1><sect1 id="devapplic-4" lang="en"><title lang="en">Application Initialization and libDtSvc</title><indexterm significance="normal" id="devapplic-ix178" lang="en"><primary lang="en">application development</primary><secondary lang="en">initialization and libDtSvc</secondary></indexterm><indexterm significance="normal" id="devapplic-ix179" lang="en"><primary lang="en">desktop</primary><secondary lang="en">libDtSvc and application initialization</secondary></indexterm><para lang="en">If your application uses any of the  <literal moreinfo="none" lang="en">libDtSvc</literal> APIs (for actions, data typing, drag and drop,  Session Manager, or Workspace Manager), it must first initialize the  <literal moreinfo="none" lang="en">libDtSvc</literal> library by calling either  <function moreinfo="none" lang="en">DtInitialize<gentext type="text">()</gentext></function> or <function moreinfo="none" lang="en">DtAppInitialize<gentext type="text">()</gentext></function>.  Refer to the <literal moreinfo="none" lang="en">DtInitialize(3)</literal> or  <literal moreinfo="none" lang="en">DtAppInitialize(3)</literal> man page for more information.  <indexterm significance="normal" id="devapplic-ix180" lang="en"><primary lang="en">DtInitialize()</primary></indexterm> <indexterm significance="normal" id="devapplic-ix181" lang="en"><primary lang="en">DtAppInitialize()</primary></indexterm></para></sect1><sect1 id="devapplic-5" lang="en"><title lang="en">Application Builder</title><indexterm significance="normal" id="devapplic-ix182" lang="en"><primary lang="en">application development</primary><secondary lang="en">Application Builder</secondary></indexterm><para lang="en">Application Builder (App Builder) is a tool that  enables you to easily create your first graphical user interfaces (GUI) for Common  Desktop Environment applications, without having to write code to call the  desktop application program interfaces (APIs). It abstracts the Motif toolkit  into simple object palettes and object property sheets. You can use App  Builder to construct a wide range of applications, from simple GUI-based  programs to complex, integrated systems. It supports User Interface Language  (UIL) file import and export to enable you to migrate your application among  other Motif-based tools and products.  <indexterm significance="normal" id="devapplic-ix183" lang="en"><primary lang="en">Application Builder</primary><secondary lang="en">App Builder</secondary></indexterm> <indexterm significance="normal" id="devapplic-ix184" lang="en"><primary lang="en">App Builder (Application Builder)</primary></indexterm></para><para lang="en">App Builder is ideally suited for use if you:  <indexterm significance="normal" id="devapplic-ix185" lang="en"><primary lang="en">Application Builder</primary><secondary lang="en">when to use</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Are not an expert Motif programmer</para></listitem><listitem lang="en"><para lang="en">Are not familiar with the Common Desktop Environment Motif  widgets</para></listitem><listitem lang="en"><para lang="en">Are not familiar with the desktop services (for example, drag and drop,  ToolTalk messaging, sessioning, help, and  internationalization)<indexterm significance="normal" id="devapplic-ix186" lang="en"><primary lang="en">drag and drop</primary></indexterm><indexterm significance="normal" id="devapplic-ix187" lang="en"><primary lang="en">ToolTalk Messaging Service</primary></indexterm><indexterm significance="normal" id="devapplic-ix188" lang="en"><primary lang="en">Session Manager</primary></indexterm><indexterm significance="normal" id="devapplic-ix189" lang="en"><primary lang="en">Help system</primary></indexterm><indexterm significance="normal" id="devapplic-ix190" lang="en"><primary lang="en">internationalization</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Want to build your application user interface quickly and be able to  change it easily</para></listitem><listitem lang="en"><para lang="en">Are working collaboratively with other people to build a single  application</para></listitem></itemizedlist><para lang="en">In fact, even if you do not fit into any of the preceding categories,  you will likely find App Builder to be appropriate and helpful for your  application development.</para><para lang="en">Using App Builder, you can:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Lay out the user interface for an application, constructing it  piece-by-piece from a collection of objects from the Common Desktop  Environment Motif  toolkit<indexterm significance="normal" id="devapplic-ix191" lang="en"><primary lang="en">Motif</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Define connections between objects to provide application GUI behavior,  then use the test mode that enables connections to be tested</para></listitem><listitem lang="en"><para lang="en">Add some of the desktop services functionality to your  application</para></listitem><listitem lang="en"><para lang="en">Edit applications that were previously created using App Builder</para></listitem><listitem lang="en"><para lang="en">Merge automatically generated code with hand-generated code</para></listitem><listitem lang="en"><para lang="en">Generate C-language source code and associated project files (for  example, message catalogs) for the application</para></listitem></itemizedlist><para lang="en">You can compile and invoke your application from within App Builder. You  can execute the build, run, and debug cycles all from a common environment  without having to exit and restart App  Builder.<indexterm significance="normal" id="devapplic-ix192" lang="en"><primary lang="en">compiling</primary><secondary lang="en">an application</secondary></indexterm></para><tip lang="en"><gentext type="text">Tip - </gentext><para lang="en">App Builder is a good learning tool. A full-featured Motif GUI builder called XDesigner is available for purchase from the Sun Microsystems Advanced Developer Tools organization.</para></tip><sect2 id="devapplic-6" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="devapplic-ix193" lang="en"><primary lang="en">Application Builder</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="devapplic-ix194" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the App Builder example programs in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtbuilder</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on these  programs.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on Application Builder, see the appropriate man  pages, the App Builder help volume, and the  <olink targetpartnumber="805-3914"><citetitle lang="en">Common Desktop Environment: Application Builder User's Guide</citetitle></olink>.  <indexterm significance="normal" id="devapplic-ix195" lang="en"><primary lang="en">application development</primary><secondary lang="en">Application Builder</secondary></indexterm></para></sect2></sect1></chapter><chapter id="port-18736" lang="en"><gentext type="text">Chapter 4</gentext><gentext type="toc">4.  Portability and Maintenance</gentext><title lang="en">Portability and Maintenance</title><highlights lang="en"><para lang="en">This chapter contains information you can use to write highly portable  applications and use to ensure that your application will be compatible with  future Common Desktop Environment releases.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"><link linkend="port-1" lang="en">"Portability Issues"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="port-31420" lang="en">"Common Desktop Environment Motif Widget Binary Compatibility  Guidelines"</link> </para></listitem></itemizedlist></highlights><sect1 id="port-1" lang="en"><title lang="en">Portability Issues</title><indexterm significance="normal" id="port-ix196" lang="en"><primary lang="en">portability issues</primary></indexterm><para lang="en">This section presents issues that might affect your  application's portability between different platforms that support the  Common Desktop Environment.</para><sect2 id="port-97065" lang="en"><title lang="en">Standards</title><indexterm significance="normal" id="port-ix197" lang="en"><primary lang="en">standards</primary></indexterm><para lang="en">To be Common Desktop Environment-compliant, your application must follow  the Motif 1.2, ANSI-C, and X11R5 standards. If you are developing your  application in C++, use C++ version 2.0 or later. No further assumptions are  made that you adhere to any standards, such as POSIX, when you write a Common  Desktop Environment application. Applications that use the desktop application  program interfaces (APIs) will be portable to other Common Desktop Environment  platforms. However, using POSIX can enhance your software's portability.  <indexterm significance="normal" id="port-ix198" lang="en"><primary lang="en">Motif 1.2</primary></indexterm> <indexterm significance="normal" id="port-ix199" lang="en"><primary lang="en">ANSI C</primary></indexterm> <indexterm significance="normal" id="port-ix200" lang="en"><primary lang="en">X11R5</primary></indexterm></para><para lang="en">The POSIX standard, IEEE Std 1003.1-1990, is entitled <citetitle lang="en">IEEE  Standard for Information Technology--Portable Operating System Interface  (POSIX)--Part 1: System Application Program Interface (API) [C Language], </citetitle>ISBN 1-55937-061-0.  <indexterm significance="normal" id="port-ix201" lang="en"><primary lang="en">POSIX</primary></indexterm></para><para lang="en">The Motif 1.2 standard, IEEE Std 1295, is entitled <citetitle lang="en">Standard  for Information Technology--X Window System Graphical User  Interface--Modular Toolkit Environment.</citetitle>  <indexterm significance="normal" id="port-ix202" lang="en"><primary lang="en">standards</primary></indexterm></para><para lang="en">For information on ordering IEEE Std 1003.1-1990 and IEEE Std 1295, see  <link linkend="preface-29208" lang="en">"Related Books"</link>  .</para></sect2><sect2 id="port-2" lang="en"><title lang="en">Makefiles</title><indexterm significance="normal" id="port-ix203" lang="en"><primary lang="en">makefiles</primary></indexterm><para lang="en">Certain libraries that the Common Desktop Environment depends on, for  example X11R5, are likely to be installed in different locations on different  platforms. Include platform-specific references to accommodate this or write a  separate makefile for each platform.</para><para lang="en">Also, the <filename moreinfo="none" lang="en">make</filename> program functionality can differ  across platforms. If you want to write just one makefile for your application,  use the common <filename moreinfo="none" lang="en">make</filename> functionality used by the platforms  to which you want to port your program. Avoid platform-specific  <filename moreinfo="none" lang="en">make</filename> features.</para><para lang="en">The Common Desktop Environment requires no additional defined constants  (<literal moreinfo="none" lang="en">-D</literal> parameters) to integrate with the desktop. If you do  follow a standard, such as POSIX, you might need to compile with additional  standard-specific flags. Read about the standard to find out if it includes  special compiler considerations.</para><para lang="en">Each subdirectory of <filename moreinfo="none" lang="en">/usr/dt/examples</filename> contains  sample makefile source files for different platforms. These makefiles take  into account system differences. In particular, see the  <filename moreinfo="none" lang="en">/usr/dt/examples/dtdts directory</filename> for generic examples of  makefiles.</para><sect3 id="port-3" lang="en"><title lang="en">Compile Options</title><para lang="en">To enable your application to find the desktop  <literal moreinfo="none" lang="en">include</literal> files, add:</para><programlisting format="linespecific" lang="en" role="fragment">-I/usr/dt/include</programlisting><para lang="en">to each makefile's compile line.</para></sect3><sect3 id="port-4" lang="en"><title lang="en">Link Options</title><para lang="en">To enable your application to reference desktop libraries, add:</para><programlisting format="linespecific" lang="en" role="fragment">-L/usr/dt/lib

-l&lt;<replaceable lang="en">libname1</replaceable>&gt;

-l&lt;<replaceable lang="en">libname2</replaceable>&gt;...</programlisting><para lang="en">to each makefile's link line, where  <replaceable lang="en">libname1</replaceable>,<replaceable lang="en"> libname2</replaceable> are  the names of libraries your application needs to reference. You can include as  many desktop library names in this line as you want. For example:  <indexterm significance="normal" id="port-ix204" lang="en"><primary lang="en">makefiles</primary></indexterm></para><programlisting format="linespecific" lang="en" role="fragment">-L/usr/dt/lib -lDtSvc

-ltt -lXm</programlisting><para lang="en">enables your application to reference the Desktop Services, ToolTalk  Messaging System, and Motif 1.2 libraries.</para></sect3></sect2><sect2 id="port-5" lang="en"><title lang="en">File-Naming Conventions</title><indexterm significance="normal" id="port-ix205" lang="en"><primary lang="en">file naming conventions</primary></indexterm><indexterm significance="normal" id="port-ix206" lang="en"><primary lang="en">naming conventions</primary><secondary lang="en">file</secondary></indexterm><para lang="en">You should limit your application file names, and the file names your  application generates, to 14 characters. This will make your application  portable to platforms that have this limitation. Some platforms can be  configured to have this constraint. </para><para lang="en">Do not place length limitations on file names that an end user  generates.</para></sect2><sect2 id="port-6" lang="en"><title lang="en">Display Support</title><indexterm significance="normal" id="port-ix207" lang="en"><primary lang="en">display support</primary></indexterm><para lang="en">Your application should support the following display options and  configurations:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Monochrome (including black-and-white icons)</para></listitem><listitem lang="en"><para lang="en">Color (including color icons)</para></listitem><listitem lang="en"><para lang="en">Small screens, such as VGA (640x480--scale application window or  font size to fit completely on the screen)  <indexterm significance="normal" id="port-ix208" lang="en"><primary lang="en">VGA</primary></indexterm></para></listitem></itemizedlist><para lang="en">If you use the Icon Editor to create color icons, your application will  share colors with other desktop applications more readily. This helps conserve  color cells when running on a Pseudo Color display.  <indexterm significance="normal" id="port-ix209" lang="en"><primary lang="en">Icon Editor</primary></indexterm> <indexterm significance="normal" id="port-ix210" lang="en"><primary lang="en">Pseudo Color display</primary></indexterm> <indexterm significance="normal" id="port-ix211" lang="en"><primary lang="en">portability issues</primary></indexterm></para></sect2></sect1><sect1 id="port-31420" lang="en"><title lang="en">Common Desktop Environment Motif Widget Binary Compatibility  Guidelines</title><indexterm significance="normal" id="port-ix212" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">Common Desktop Environment Motif widget binary compatibility</secondary></indexterm><indexterm significance="normal" id="port-ix213" lang="en"><primary lang="en">compatibility</primary><secondary lang="en">guidelines, for Common Desktop Environment widgets</secondary></indexterm><indexterm significance="normal" id="port-ix214" lang="en"><primary lang="en">widget</primary><secondary lang="en">compatibility guidelines</secondary></indexterm><para lang="en">Any widget subclass that you implement using the standard Xt APIs that  rely on the size of data structures of widgets from which you have subclassed  might not be compatible with any new version of Motif or the Common Desktop  Environment. The reason for this is that new fields may be added to the  superclasses in the new version of Motif. An example is that new fields have  been added to the <literal moreinfo="none" lang="en">XmManager</literal> and  <literal moreinfo="none" lang="en">XmPrimitive</literal> classes in Motif 2.0. </para><para lang="en">The incompatibility occurs because a subclass must contain compiled-in  references to its instance fields that are specified relative to the start  address of the widget instance. When you install a new Motif library for a  widget whose superclass instance structure has been extended, the compiled-in  references will point to the wrong memory location.</para><para lang="en">To avoid this difficulty, Motif provides a mechanism for defining  resources and accessing widget fields that allows you to reference all fields  in the instance and constraint structures relative to the start of the widget  <literal moreinfo="none" lang="en">part</literal> structure, instead of the overall widget structure.  (The overall widget structure includes the superclass part structure.) The  mechanism resolves these relative references at run time, when the widget  class is first initialized. To resolve references, it factors in the size of  the widget's superclass instance structure, which it reads from the  currently linked Motif library.</para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">If you implement subclassing, you <emphasis lang="en">must</emphasis> use the  Motif reference-resolving mechanism if you want your application to be binary  compatible with future releases of the Common Desktop Environment.</para></note><para lang="en">For details regarding this Motif mechanism, consult the Motif 1.2  <literal moreinfo="none" lang="en">XmResolvePartOffsets(3x)</literal> and  <literal moreinfo="none" lang="en">XmResolveAllPartOffsets(3x)</literal> man pages and the  <citetitle lang="en">Motif 2.1 Programmer's Reference</citetitle>. You can find example source code in <filename moreinfo="none" lang="en">/usr/dt/examples/motif/dogs</filename>.  <indexterm significance="normal" id="port-ix215" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">Common Desktop Environment Motif widget binary compatibility</secondary></indexterm> <indexterm significance="normal" id="port-ix216" lang="en"><primary lang="en">compatibility</primary><secondary lang="en">guidelines, for Common Desktop Environment widgets</secondary></indexterm> <indexterm significance="normal" id="port-ix217" lang="en"><primary lang="en">widget</primary><secondary lang="en">compatibility guidelines</secondary></indexterm></para></sect1></chapter><chapter id="basicinteg-27679" lang="en"><gentext type="text">Chapter 5</gentext><gentext type="toc">5.  Basic Application Integration					</gentext><title lang="en">Basic Application Integration					</title><highlights lang="en"><para lang="en">Basic application integration is a set of highly recommended tasks you  should perform. These tasks <emphasis lang="en">do not</emphasis> require modification  of the source code for your application.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"><link linkend="basicinteg-11901" lang="en">"Basic Integration Features"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="basicinteg-31424" lang="en">"Organization of Basic Integration Information"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="basicinteg-20235" lang="en">"Basic Integration Tasks"</link> </para></listitem></itemizedlist><para lang="en">Basic integration does not involve extensive use of the desktop  application program interface (API). Therefore, it does not provide other  interaction with the desktop, such as drag and drop, session management,  ToolTalk messaging, and programmatic access to the actions and data types  database. </para></highlights><sect1 id="basicinteg-11901" lang="en"><title lang="en">Basic Integration Features</title><para lang="en">Basic application integration provides these features for end  users:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">A graphical way to locate and start your application on the  desktop.</para><para lang="en">Your application will provide a desktop <replaceable lang="en">registration  package</replaceable>, and your installation script will automatically  register your application.</para><para lang="en">Registration creates an application group at the top level of  Application Manager. The application group contains an icon the user  double-clicks to start the application.</para></listitem><listitem lang="en"><para lang="en">The ability to recognize and manipulate your application's data  files. </para><para lang="en">Your application will provide data types for its data files.</para><para lang="en">Data typing configures data files to use a unique icon in File Manager  to help users identify them. The data files also have meaningful desktop  behavior. Two examples are:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">The user can start your application by double-clicking a data  file.</para></listitem><listitem lang="en"><para lang="en">Dropping a data file on a desktop printer drop zone prints the file  using the appropriate print command.</para></listitem></itemizedlist></listitem><listitem lang="en"><para lang="en">Easy font and color selection using Style Manager.</para><para lang="en">Your application will change interface fonts and background, foreground,  and shadow colors dynamically.</para><para lang="en">The desktop defines general interface font and color resources that are  used if no corresponding application-specific resources exist.</para></listitem></itemizedlist><para lang="en">Basic integration provides these advantages to system  administrators:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Easy installation and registration.</para><para lang="en">Upon installation, the application is automatically registered. The  system administrator has little or no additional work to do.</para></listitem><listitem lang="en"><para lang="en">Easy ongoing administration. </para><para lang="en">All the desktop's configuration files are gathered in one  location. Furthermore, the application can easily be unregistered if, for  example, the system administrator wants to update it or to move it to a  different application server.</para></listitem></itemizedlist></sect1><sect1 id="basicinteg-31424" lang="en"><title lang="en">Organization of Basic Integration Information</title><para lang="en">Most of the tasks involved in basic integration are also performed by  system administrators who are integrating an existing application into the  desktop. Therefore, most basic integration documentation is located in the  <olink targetpartnumber="805-3900"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System Administrator's Guide</citetitle></olink>. </para><para lang="en">The <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink> contains a chapter on basic  integration. Where appropriate, the chapter refers you to the information  contained in the <olink targetpartnumber="805-3900"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System Administrator's Guide</citetitle></olink>. It also contains additional information specific to  application programmers.</para></sect1><sect1 id="basicinteg-20235" lang="en"><title lang="en">Basic Integration Tasks</title><para lang="en">These are the general tasks involved in basic integration:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Modify any application resources that set fonts and colors. This allows  users to change the application's interface fonts and colors using Style  Manager.</para><para lang="en">See the section on modifying font and color resources in the  <olink targetpartnumber="805-3900"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System Administrator's Guide</citetitle></olink>. </para></listitem><listitem lang="en"><para lang="en">Provide printing for your application's data files.</para><para lang="en">See the <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink> basic integration chapter for  details. </para><para lang="en">Some types of printing integration require that you modify your  application code. They are optional, and are discussed in the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink> basic integration chapter because they are closely  related to basic integration tasks.</para></listitem><listitem lang="en"><para lang="en">Create the registration package for your application. </para><para lang="en">See this documentation:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink> basic integration chapter</para></listitem><listitem lang="en"><para lang="en"><olink targetpartnumber="805-3900"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System Administrator's Guide</citetitle></olink></para></listitem></itemizedlist></listitem><listitem lang="en"><para lang="en">Modify your application's installation script to install the  registration package files and perform the registration procedure.</para><para lang="en">See this documentation:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink> basic integration chapter</para></listitem><listitem lang="en"><para lang="en">The section on registering the application using  <literal moreinfo="none" lang="en">dtappintegrate</literal> in the  <olink targetpartnumber="805-3900"><citetitle lang="en">Solaris Common Desktop Environment: Advanced User's and System Administrator's Guide</citetitle></olink></para></listitem></itemizedlist></listitem></itemizedlist><programlisting format="linespecific" lang="en" role="fragment"/></sect1></chapter><chapter id="recinteg-88933" lang="en"><gentext type="text">Chapter 6</gentext><gentext type="toc">6.  Recommended Integration</gentext><title lang="en">Recommended Integration</title><highlights lang="en"><para lang="en">The Common Desktop Environment contains components and guidelines to use  so that your application will integrate well with other applications on the  desktop. This chapter provides an overview of each recommended component and  guideline that you should use to enhance your application's level of  consistency with the desktop.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"><link linkend="recinteg-83215" lang="en">"Help System"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="recinteg-35657" lang="en">"ToolTalk Messaging Service"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="recinteg-31756" lang="en">"Session Manager"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="recinteg-40503" lang="en">"Drag and Drop"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="recinteg-52667" lang="en">"Internationalization "</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="recinteg-56283" lang="en">"Standard Font Names"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="recinteg-96916" lang="en">"Displaying Error Messages from Your Application"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="recinteg-11521" lang="en">"User Customization Issues"</link> </para></listitem></itemizedlist><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">In addition to incorporating the components and following the guidelines  in this section, you should also follow the basic integration steps outlined  in <link linkend="basicinteg-27679" lang="en">Chapter 5, Basic Application Integration					</link>  .</para></note><para lang="en">For more information on recommended integration, see the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></highlights><indexterm significance="normal" id="recinteg-ix218" lang="en"><primary lang="en">recommended integration</primary></indexterm><indexterm significance="normal" id="recinteg-ix219" lang="en"><primary lang="en">levels of integration</primary><secondary lang="en">recommended</secondary></indexterm><indexterm significance="normal" id="recinteg-ix220" lang="en"><primary lang="en">integration</primary><secondary lang="en">recommended</secondary></indexterm><sect1 id="recinteg-83215" lang="en"><title lang="en">Help System</title><para lang="en">The Common Desktop Environment Help system is a complete system for  developing and displaying online help for application software. It enables  authors to write online help that includes rich graphics and text formatting,  hyperlinks, and access to the Help system from within the application. The  Help system provides a programmer's toolkit for integrating the help  facilities into an application.</para><para lang="en">Creating and integrating online help into an application can be done as  a collaborative project. Developers design and implement how an application  responds to a user's request for help. Authors organize and write the  actual help information that is displayed. </para><para lang="en">The Help system includes:</para><bridgehead lang="en">For Authors<indexterm significance="normal" id="recinteg-ix221" lang="en"><primary lang="en">Help system</primary><secondary lang="en">authors, for</secondary></indexterm></bridgehead><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Common Desktop Environment HelpTag markup language--a set of  <emphasis lang="en">tags</emphasis> used in text files to mark organization and content  of online help<indexterm significance="normal" id="recinteg-ix222" lang="en"><primary lang="en">HelpTag</primary></indexterm><indexterm significance="normal" id="recinteg-ix223" lang="en"><primary lang="en">Help system</primary><secondary lang="en">Help Tag</secondary></indexterm></para></listitem><listitem lang="en"><para lang="en">Common Desktop Environment HelpTag software--a set of software  tools for converting HelpTag files into run-time help files</para></listitem><listitem lang="en"><para lang="en">Common Desktop Environment Helpview application--a viewer program  for displaying online help</para></listitem></itemizedlist><para lang="en">Authors create help topics using the Help tag set and follow Structured  Graphic Markup Language (SGML) tagging conventions. SGML markup is the primary  data format. When compiled, the run-time distribution format is  SGML-compliant.<indexterm significance="normal" id="recinteg-ix224" lang="en"><primary lang="en">Standard Generalized Markup Language (SGML)</primary></indexterm><indexterm significance="normal" id="recinteg-ix225" lang="en"><primary lang="en">Help system</primary><secondary lang="en">SGML</secondary></indexterm></para><para lang="en">The Help system also supports non-SGML formats such as UNIX man pages,  text files, and text  strings.<indexterm significance="normal" id="recinteg-ix226" lang="en"><primary lang="en">UNIX</primary></indexterm><indexterm significance="normal" id="recinteg-ix227" lang="en"><primary lang="en">Help system</primary><secondary lang="en">UNIX man pages</secondary></indexterm></para><bridgehead lang="en">For  Programmers<indexterm significance="normal" id="recinteg-ix228" lang="en"><primary lang="en">Help system</primary><secondary lang="en">programmers, for</secondary></indexterm></bridgehead><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtHelp</literal> programming library--Application program  interface (API) for creating and integrating help windows into your  application</para></listitem><listitem lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtHelp</literal> widgets--<literal moreinfo="none" lang="en">DtHelpDialog</literal>  and <literal moreinfo="none" lang="en">DtHelpQuickDialog</literal> widgets to create help dialog boxes  and quick help dialog boxes (these are also part of the Help  library)<indexterm significance="normal" id="recinteg-ix229" lang="en"><primary lang="en">widget</primary><secondary lang="en">Help system</secondary></indexterm></para></listitem></itemizedlist><sect2 id="recinteg-1" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="recinteg-ix230" lang="en"><primary lang="en">Help system</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The Help library, <literal moreinfo="none" lang="en">libDtHelp</literal>, provides support for  creating and managing help dialogs based on Motif. The  <literal moreinfo="none" lang="en">libDtHelp</literal> header files are:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dt/Help.h</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dt/HelpDialog.h</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dt/HelpQuickD.h</filename></para></listitem></itemizedlist></sect2><sect2 id="recinteg-2" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="recinteg-ix231" lang="en"><primary lang="en">Help system</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="recinteg-ix232" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the Help system demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dthelp</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on the Help system, see the relevant man pages and  the <olink targetpartnumber="805-4055"><citetitle lang="en">Common Desktop Environment: Help System Author's and Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="recinteg-35657" lang="en"><title lang="en">ToolTalk Messaging Service</title><para lang="en">The Common Desktop Environment defines two standard ToolTalk protocols  known as <emphasis lang="en">message sets</emphasis>. A message set contains a number of  messages that can be exchanged between a sender and a handler process. These  message are grouped together because they describe related requests and  notices. The sender and recipient can be within the same process or on  different hosts. Message sets have associated utility functions that enable  you to concentrate on the semantics of the protocol without getting too  involved in low-level details. Some message set functions enable you to easily  defer to default behavior.  <indexterm significance="normal" id="recinteg-ix233" lang="en"><primary lang="en">message sets</primary></indexterm> <indexterm significance="normal" id="recinteg-ix234" lang="en"><primary lang="en">ToolTalk Messaging Service</primary><secondary lang="en">message sets</secondary></indexterm></para><para lang="en">The <emphasis lang="en">desktop message set</emphasis> encompasses three areas:  <indexterm significance="normal" id="recinteg-ix235" lang="en"><primary lang="en">desktop message set</primary></indexterm><indexterm significance="normal" id="recinteg-ix236" lang="en"><primary lang="en">ToolTalk Messaging Service</primary><secondary lang="en">desktop message set</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Windowing behavior</para></listitem><listitem lang="en"><para lang="en">File access and short-term file lifecycle control</para></listitem><listitem lang="en"><para lang="en">Application extension languages</para></listitem></itemizedlist><para lang="en">See <link linkend="recinteg-24310" lang="en">"Handle Desktop"</link> and <link linkend="recinteg-40322" lang="en">"Send Desktop"</link> for information on windowing behavior. See <link linkend="recinteg-41574" lang="en">"Desktop File"</link> for information on file access and short-term file lifecycle control.  Implementing the <literal moreinfo="none" lang="en">Do_Command</literal> request is specific to the  application's extension language and is not assisted by the ToolTalk Messaging  Service.</para><para lang="en">The <emphasis lang="en">media message set</emphasis> enables an application to be  a container for arbitrary media or to be a media player and editor that can be  driven from such a container. The media message set enables a container  application to compose, display, edit, and print a document of an arbitrary  media type, without understanding anything about the format of that media  type. The ToolTalk Messaging Service routes a container's requests to the  user's preferred tool for the given media type and operation. This includes  routing the request to an already-running instance of the tool, if that  instance can best handle the request. See <link linkend="recinteg-19106" lang="en">"Send Media"</link>  " and <link linkend="recinteg-13045" lang="en">"Handle Media"</link>.<indexterm significance="normal" id="recinteg-ix237" lang="en"><primary lang="en">media message set</primary></indexterm><indexterm significance="normal" id="recinteg-ix238" lang="en"><primary lang="en">ToolTalk Messaging Service</primary><secondary lang="en">media message set</secondary></indexterm></para><sect2 id="recinteg-3" lang="en"><title lang="en">Message Sets</title><para lang="en">The ToolTalk Messaging Service provides support for these message  sets:</para><sect3 id="recinteg-24310" lang="en"><title lang="en">Handle Desktop</title><para lang="en">Handling desktop requests is the most basic level of messaging  integration. Any application that sends ToolTalk messages, either through  calling <function moreinfo="none" lang="en">tt_message_send<gentext type="text">()</gentext></function> or  <function moreinfo="none" lang="en">DtActionInvoke<gentext type="text">()</gentext></function>, should handle the desktop requests.  This enables other applications to set or query things such as your  application's current directory, iconic state, and  <literal moreinfo="none" lang="en">$DISPLAY</literal>. For further information, see the man pages for  <function moreinfo="none" lang="en">ttdt_open<gentext type="text">()</gentext></function>, <function moreinfo="none" lang="en">ttdt_session_join<gentext type="text">()</gentext></function>,  <function moreinfo="none" lang="en">ttdt_session_quit<gentext type="text">()</gentext></function>, and  <function moreinfo="none" lang="en">ttdt_close<gentext type="text">()</gentext></function>.</para></sect3><sect3 id="recinteg-40322" lang="en"><title lang="en">Send Desktop</title><para lang="en">When an application is started by <literal moreinfo="none" lang="en">ttsession</literal> to handle  some ToolTalk request, it is a child of <literal moreinfo="none" lang="en">ttsession</literal> rather  than of the request sender. The application will usually be started on the  same X display session as the sender, but not necessarily on the same X11  screen or in the same current directory context . If the application is  implemented as a server process, it may already be displaying on a particular  screen or in a particular directory context. </para><para lang="en">Using desktop requests, a handling application can inherit from the  sender attributes that might otherwise be inherited through command-line  invocation. Use the desktop message set in this way to reset the  handler's locale, current working directory, and even  <literal moreinfo="none" lang="en">$DISPLAY</literal>. This enables a carefully coded receiving  application to come up on the same X11 screen as the sender. A request handler  can also find out the request sender's current directory and window  geometry. Knowing the window geometry enables the request handler's  window to avoid obscuring the request sender's window, if possible. For  more information, see the <function moreinfo="none" lang="en">ttdt_sender_imprint_on<gentext type="text">()</gentext></function> man  page.</para></sect3><sect3 id="recinteg-13045" lang="en"><title lang="en">Handle Media</title><para lang="en">The ToolTalk Messaging Service enables an editor to easily handle the  standard media requests for the media types for which the editor is  responsible. For further information, see the man pages for  <function moreinfo="none" lang="en">ttmedia_ptype_declare<gentext type="text">()</gentext></function>,  <function moreinfo="none" lang="en">ttdt_message_accept<gentext type="text">()</gentext></function>,  <function moreinfo="none" lang="en">ttmedia_load_reply<gentext type="text">()</gentext></function>, and  <function moreinfo="none" lang="en">ttmedia_Deposit<gentext type="text">()</gentext></function>.</para></sect3><sect3 id="recinteg-19106" lang="en"><title lang="en">Send Media</title><para lang="en">The ToolTalk Messaging Service enables a container to easily send media  requests and manage the subsequent document updates sent back by the handler.  In those cases in which the container doesn't engage in any ongoing ToolTalk  dialog with a media handler, use the actions API instead of directly using  these ToolTalk APIs. Equivalent actions (Open and Print) represent a higher  level of abstraction that supports the equivalent of ToolTalk and non-ToolTalk  aware media handlers.For further information, see the man pages for  <function moreinfo="none" lang="en">ttmedia_load<gentext type="text">()</gentext></function> and  <function moreinfo="none" lang="en">ttdt_subcontract_manage<gentext type="text">()</gentext></function>. Note that, in most cases, a  container application should perform operations on objects using  <function moreinfo="none" lang="en">DtActionInvoke<gentext type="text">()</gentext></function> instead of  <function moreinfo="none" lang="en">ttmedia_load<gentext type="text">()</gentext></function>. See
the  <olink targetpartnumber="805-3915"><citetitle lang="en">Common Desktop Environment: ToolTalk Messaging Overview</citetitle></olink> for a description of how ToolTalk applications  can be driven using actions.</para></sect3><sect3 id="recinteg-41574" lang="en"><title lang="en">Desktop File</title><para lang="en">The ToolTalk Messaging Service makes it easy to send and receive the  desktop messages about files. These messages enable applications to coordinate  access to files. For further information, see the man pages for  <function moreinfo="none" lang="en">ttdt_file_join<gentext type="text">()</gentext></function>, <function moreinfo="none" lang="en">ttdt_file_quit<gentext type="text">()</gentext></function>,  <function moreinfo="none" lang="en">ttdt_file_event<gentext type="text">()</gentext></function>,  <function moreinfo="none" lang="en">ttdt_Get_Modified<gentext type="text">()</gentext></function>, <function moreinfo="none" lang="en">ttdt_Save<gentext type="text">()</gentext></function>,  and <function moreinfo="none" lang="en">ttdt_Revert<gentext type="text">()</gentext></function>.</para><para lang="en">Examples of applications that already use the ToolTalk Messaging Service  include the Common Desktop Environment Icon Editor, Mailer, Text Editor, and  Calendar. Other parts of the Common Desktop Environment use the ToolTalk  Messaging Service indirectly by defining actions that send messages.</para></sect3></sect2><sect2 id="recinteg-4" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="recinteg-ix239" lang="en"><primary lang="en">ToolTalk Messaging Service</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The ToolTalk messaging library is called <literal moreinfo="none" lang="en">libtt</literal>. The  <literal moreinfo="none" lang="en">libtt</literal> header files are:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Tt/tt_c.h</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Tt/tttk.h</filename></para></listitem></itemizedlist></sect2><sect2 id="recinteg-5" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="recinteg-ix240" lang="en"><primary lang="en">ToolTalk Messaging Service</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="recinteg-ix241" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the ToolTalk Messaging Service demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/tt</filename>. Read the <filename moreinfo="none" lang="en">README</filename>  file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on the ToolTalk Messaging Service, see the relevant  man pages and the <olink targetpartnumber="805-3915"><citetitle lang="en">Common Desktop Environment: ToolTalk Messaging Overview</citetitle></olink>.</para></sect2></sect1><sect1 id="recinteg-31756" lang="en"><title lang="en">Session Manager</title><para lang="en">Session Manager supports the ICCCM 1.1 <literal moreinfo="none" lang="en">WM_COMMAND</literal> and  <literal moreinfo="none" lang="en">WM_SAVE_YOURSELF</literal> protocols, which permit:  <indexterm significance="normal" id="recinteg-ix242" lang="en"><primary lang="en">WM_COMMAND</primary></indexterm> <indexterm significance="normal" id="recinteg-ix243" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">WM_COMMAND</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix244" lang="en"><primary lang="en">WM_SAVE_YOURSELF</primary></indexterm> <indexterm significance="normal" id="recinteg-ix245" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">WM_SAVE_YOURSELF</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix246" lang="en"><primary lang="en">protocols</primary><secondary lang="en">WM_COMMAND</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix247" lang="en"><primary lang="en">protocols</primary><secondary lang="en">WM_SAVE_YOURSELF</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Your application to save state information at logout</para></listitem><listitem lang="en"><para lang="en">Session Manager to restart your application at login</para></listitem></itemizedlist><para lang="en">Session Manager also provides an API to assist your application in  saving and restoring its state at logout and login.</para><para lang="en">Session Manager is responsible for restarting applications at login. To  do this, your application must tell Session Manager what command and  command-line options are required to restart it. Use Xlib's  <function moreinfo="none" lang="en">XSetCommand<gentext type="text">()</gentext></function> to set the <literal moreinfo="none" lang="en">WM_COMMAND</literal>  property on your application's top-level window.</para><para lang="en">When Session Manager saves a session, such as at logout, your  application might need to save some state information so it can be restored to  a similar state. Session Manager can optionally notify your application that  the session is being saved. Your application must inform Session Manager that  it wants such notification. It does this by registering the  <literal moreinfo="none" lang="en">WM_SAVE_YOURSELF</literal> protocol with its top-level window  <literal moreinfo="none" lang="en">WM_PROTOCOLS</literal> property and setting up a callback procedure  to handle the notification. To do this, use the  <function moreinfo="none" lang="en">XmAddWMProtocols<gentext type="text">()</gentext></function> and  <function moreinfo="none" lang="en">XmAddWMProtocolsCallback<gentext type="text">()</gentext></function> functions. Your application  should not interact with the user in any way when processing the  <literal moreinfo="none" lang="en">WM_SAVE_YOURSELF</literal> callback. (For example,
it should not  display a Save As dialog box.) It must set the <literal moreinfo="none" lang="en">WM_COMMAND</literal>  property on its top-level window to notify Session Manager that it is done  saving its state. <indexterm significance="normal" id="recinteg-ix248" lang="en"><primary lang="en">XmAddWMProtocols()</primary></indexterm><indexterm significance="normal" id="recinteg-ix249" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">XmAddWMProtocols()</secondary></indexterm><indexterm significance="normal" id="recinteg-ix250" lang="en"><primary lang="en">XmAddWMProtocolsCallback()</primary></indexterm><indexterm significance="normal" id="recinteg-ix251" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">XmAddWMProtocolsCallback()</secondary></indexterm></para><para lang="en">To enable your application to save state information, use the  <function moreinfo="none" lang="en">DtSessionSavePath<gentext type="text">()</gentext></function> function to obtain the full path name  of a file in which this information can be saved. At session restore time, use  the <function moreinfo="none" lang="en">DtSessionRestorePath<gentext type="text">()</gentext></function> function to obtain the full  path name of the state file your application uses to restore its  state.<indexterm significance="normal" id="recinteg-ix252" lang="en"><primary lang="en">DtSessionSavePath()</primary></indexterm><indexterm significance="normal" id="recinteg-ix253" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">DtSessionSavePath()</secondary></indexterm><indexterm significance="normal" id="recinteg-ix254" lang="en"><primary lang="en">DtSessionRestorePath()</primary></indexterm><indexterm significance="normal" id="recinteg-ix255" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">DtSessionRestorePath()</secondary></indexterm></para><para lang="en">The Common Desktop Environment Workspace Manager is responsible for  restoring an application's main top-level window (containing the  <literal moreinfo="none" lang="en">WM_COMMAND</literal>) property to the proper workspace, geometry, and  icon state. If an application has multiple top-level windows, it is the  application's responsibility to restore the states of the other  top-level windows. Refer to <link linkend="optinteg-30393" lang="en">"Workspace Manager"</link>   for additional  information.<indexterm significance="normal" id="recinteg-ix256" lang="en"><primary lang="en">Workspace Manager</primary></indexterm></para><sect2 id="recinteg-6" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="recinteg-ix257" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The Desktop Services library, <literal moreinfo="none" lang="en">libDtSvc</literal>, provides  access to many desktop APIs, including the one for session management. Include  the <filename moreinfo="none" lang="en">Dt/Dt.h</filename> and <filename moreinfo="none" lang="en">Dt/Session.h</filename> header  files to access the Session Manager API.</para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">If your application uses any of the Session Manager APIs, it must first  initialize the <literal moreinfo="none" lang="en">libDtSvc</literal> library by calling either  <function moreinfo="none" lang="en">DtInitialize<gentext type="text">()</gentext></function> or <function moreinfo="none" lang="en">DtAppInitialize<gentext type="text">()</gentext></function>.  Refer to the <literal moreinfo="none" lang="en">DtInitialize(3)</literal> or  <literal moreinfo="none" lang="en">DtAppInitialize(3)</literal> man page for more  information.<indexterm significance="normal" id="recinteg-ix258" lang="en"><primary lang="en">DtInitialize()</primary></indexterm><indexterm significance="normal" id="recinteg-ix259" lang="en"><primary lang="en">DtAppInitialize()</primary></indexterm></para></note></sect2><sect2 id="recinteg-7" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="recinteg-ix260" lang="en"><primary lang="en">Session Manager</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="recinteg-ix261" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the Session Manager demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtsession</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on Session Manager, see the relevant man pages and  the <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="recinteg-40503" lang="en"><title lang="en">Drag and Drop</title><para lang="en">The Common Desktop Environment provides a drag-and-drop API, that is  layered on top of the Motif 1.2 drag-and-drop API, to provide convenient,  consistent, and interoperable drag and drop across the desktop. The Common  Desktop Environment drag-and-drop API makes it easier for developers to  implement drag and drop. With drag and drop, users can manipulate objects on  the screen directly by grabbing them, dragging them around the display, and  dropping them on other objects to change the object's location or  perform a data transfer.</para><para lang="en">Motif 1.2 drag and drop provides low-level drag-and-drop mechanisms;  Common Desktop Environment drag and drop incorporates policies for those  mechanisms. <indexterm significance="normal" id="recinteg-ix262" lang="en"><primary lang="en">drag and drop</primary><secondary lang="en">and Motif 1.2 drag and drop</secondary></indexterm></para><para lang="en">Common Desktop Environment drag and drop consists of an API and  protocols to simplify the interface to Motif drag and drop. It implements  policies such as the buffer transfer protocol and the drag cursors'  appearances. Use the Common Desktop Environment drag-and-drop API, with its  built-in policies, to ensure interoperability through consistency. Common  Desktop Environment drag-and-drop policies are compatible with standard Motif  1.2 drag-and-drop protocols for text and file name transfers.</para><para lang="en">Common Desktop Environment drag and drop uses the X selection mechanism  to transfer data. Suitable targets exist and are registered with the X  Consortium. Two desktop applications can agree to transfer data through the  text, file name, or data transfer protocols.</para><para lang="en">The existing Motif 1.2 API for drag and drop is flexible and, therefore,  is somewhat difficult for nonexpert developers to use. The Common Desktop  Environment drag-and-drop API provides some convenience functions that result  in an API that is simpler and easier to use:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Manages the configuration and appearance of drag icons.</para><para lang="en">Common Desktop Environment drag and drop provides graphics for the  default source, state, and operation icons that compose the drag icon in Motif  1.2.</para></listitem><listitem lang="en"><para lang="en">Defines a buffer transfer protocol.</para><para lang="en">Motif 1.2 drag and drop defines protocols for file name and text string  only.</para></listitem><listitem lang="en"><para lang="en">Enables animation upon drop.</para><para lang="en">The drop zone can define an animation procedure that is called when the  drop completes.</para></listitem><listitem lang="en"><para lang="en">Provides enumeration of targets for <literal moreinfo="none" lang="en">TEXT</literal> and  <literal moreinfo="none" lang="en">FILE_NAME</literal> transfers.</para></listitem><listitem lang="en"><para lang="en">Provides dual registration.</para><para lang="en">You can register a text widget as a drop zone for data other than text,  while preserving the ability to accept text drops.</para></listitem><listitem lang="en"><para lang="en">Provides prioritized drop formats.</para><para lang="en">The order in which you specify protocols for the drop zone indicates the  relative priority of the protocols desired.</para></listitem></itemizedlist><sect2 id="recinteg-8" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="recinteg-ix263" lang="en"><primary lang="en">drag and drop</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The Desktop Services library, <literal moreinfo="none" lang="en">libDtSvc</literal>, provides  access to many desktop APIs, including that for drag and drop. Include the  <filename moreinfo="none" lang="en">Dt/Dt.h</filename> and <filename moreinfo="none" lang="en">Dt/Dnd.h</filename> header files to  access the drag-and-drop API.</para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">If your application uses any of the drag-and-drop APIs, it must first  initialize the <literal moreinfo="none" lang="en">libDtSvc</literal> library by calling either  <function moreinfo="none" lang="en">DtInitialize<gentext type="text">()</gentext></function> or <function moreinfo="none" lang="en">DtAppInitialize<gentext type="text">()</gentext></function>.  Refer to the <literal moreinfo="none" lang="en">DtInitialize(3)</literal> or  <literal moreinfo="none" lang="en">DtAppInitialize(3)</literal> man page for more information.  <indexterm significance="normal" id="recinteg-ix264" lang="en"><primary lang="en">DtInitialize()</primary></indexterm> <indexterm significance="normal" id="recinteg-ix265" lang="en"><primary lang="en">DtAppInitialize()</primary></indexterm></para></note></sect2><sect2 id="recinteg-9" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="recinteg-ix266" lang="en"><primary lang="en">drag and drop</primary><secondary lang="en">demo programs</secondary></indexterm><para lang="en">You can find the drag-and-drop demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtdnd</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on Common Desktop Environment drag and drop, see  the relevant man pages and the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="recinteg-52667" lang="en"><title lang="en">Internationalization </title><para lang="en">The Common Desktop Environment is internationalized to support  single-byte and multibyte locales. Developers can write internationalized  applications that can be easily localized to run on any Common Desktop  Environment platform. <indexterm significance="normal" id="recinteg-ix267" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">internationalization</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix268" lang="en"><primary lang="en">single-byte locales</primary></indexterm> <indexterm significance="normal" id="recinteg-ix269" lang="en"><primary lang="en">locales</primary><secondary lang="en">single-byte</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix270" lang="en"><primary lang="en">internationalization</primary><secondary lang="en">single-byte locales</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix271" lang="en"><primary lang="en">multibyte locales</primary></indexterm> <indexterm significance="normal" id="recinteg-ix272" lang="en"><primary lang="en">locales</primary><secondary lang="en">multibyte</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix273" lang="en"><primary lang="en">internationalization</primary><secondary lang="en">multibyte locales</secondary></indexterm></para><para lang="en">Common Desktop Environment applications (both source and binary) can be  localized into regional languages and territories, and across multiple vendors  and hardware platforms: <indexterm significance="normal" id="recinteg-ix274" lang="en"><primary lang="en">locales</primary><secondary lang="en">applications can be localized into</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix275" lang="en"><primary lang="en">internationalization</primary><secondary lang="en">locales</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Latin American</para></listitem><listitem lang="en"><para lang="en">Western European</para></listitem><listitem lang="en"><para lang="en">Japanese</para></listitem><listitem lang="en"><para lang="en">Korean </para></listitem><listitem lang="en"><para lang="en">Chinese (Traditional and Simplified)</para></listitem><listitem lang="en"><para lang="en">Thai</para></listitem><listitem lang="en"><para lang="en">Hebrew</para></listitem><listitem lang="en"><para lang="en">Arabic</para></listitem></itemizedlist><para lang="en">The Common Desktop Environment takes advantage of internationalization  features in these standards:  <indexterm significance="normal" id="recinteg-ix276" lang="en"><primary lang="en">standards</primary><secondary lang="en">internationalization</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix277" lang="en"><primary lang="en">internationalization</primary><secondary lang="en">standards</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">IEEE 1003.2-1992 (POSIX.2 Annex B)  <indexterm significance="normal" id="recinteg-ix278" lang="en"><primary lang="en">POSIX</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">X Window System, Version 11 Release 5 (Locales and Internationalization  Text Functions) <indexterm significance="normal" id="recinteg-ix279" lang="en"><primary lang="en">X11R5</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Motif 1.2 (Internationalizing and Localizing Motif clients)  <indexterm significance="normal" id="recinteg-ix280" lang="en"><primary lang="en">Motif 1.2</primary></indexterm></para></listitem><listitem lang="en"><para lang="en">Motif 2.1 CTL (Complex Text Layout) support (required for Arabic, Hebrew, and Thai locales)</para></listitem></itemizedlist><para lang="en">If you intend to internationalize your application, you must ensure that  it supports input and output of multibyte characters. Also, make sure that  message catalogs are used and code can be fully localized. </para><sect2 id="recinteg-10" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="recinteg-ix281" lang="en"><primary lang="en">internationalization</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="recinteg-ix282" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">The drawing program demo in  <filename moreinfo="none" lang="en">/usr/dt/examples/template</filename> is internationalized. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on this demo.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on Common Desktop Environment internationalization,  see the development environment component man pages and the  <olink targetpartnumber="805-3916"><citetitle lang="en">Common Desktop Environment: Internationalization Programmer's Guide</citetitle></olink>.  <indexterm significance="normal" id="recinteg-ix283" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">internationalization</secondary></indexterm></para></sect2></sect1><sect1 id="recinteg-56283" lang="en"><title lang="en">Standard Font Names</title><para lang="en">The standard font names defined by the Common Desktop Environment are  guaranteed to be available on all Common Desktop Environment-compliant  systems. These names do not specify actual fonts. Instead, they are aliases  that each system vendor maps to the vendor's best available fonts. If  you use only these font names in your application, you can be sure of getting  the closest matching font on any Common Desktop Environment-compliant system.  These comprise a set of X Window System font names you can use for the most  common categories of type designs and styles.  <indexterm significance="normal" id="recinteg-ix284" lang="en"><primary lang="en">fonts</primary><secondary lang="en">standard font names</secondary></indexterm><indexterm significance="normal" id="recinteg-ix285" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">font use</secondary></indexterm></para><para lang="en">The standard font names are mapped to different fonts on different  Common Desktop Environment platforms, typically using the X font alias  mechanism. This eliminates the problem of having to select from a varying set  of fonts on different platforms. It also enables you to make use of the  default set of fonts on a particular vendor's Common Desktop Environment  implementation. </para><para lang="en">The Common Desktop Environment defines two types of standard fonts:  application fonts and interface fonts. Use the application fonts for output  produced by your application. Motif widgets and the desktop use interface  fonts; do <emphasis lang="en">not</emphasis> change their default  fonts.<indexterm significance="normal" id="recinteg-ix286" lang="en"><primary lang="en">interface fonts</primary></indexterm><indexterm significance="normal" id="recinteg-ix287" lang="en"><primary lang="en">fonts</primary><secondary lang="en">interface</secondary></indexterm></para><sect2 id="recinteg-11" lang="en"><title lang="en">Application Fonts</title><indexterm significance="normal" id="recinteg-ix288" lang="en"><primary lang="en">application fonts</primary></indexterm><indexterm significance="normal" id="recinteg-ix289" lang="en"><primary lang="en">fonts</primary><secondary lang="en">application</secondary></indexterm><para lang="en">At least six point sizes are available on all Common Desktop Environment  platforms for each font associated with a Standard Font Name: 8, 10, 12, 14,  18, and 24. XLFD font descriptions for Common Desktop Environment fonts look  like:</para><programlisting format="linespecific" lang="en" role="fragment"><literal moreinfo="none" lang="en">-dt-application-*</literal></programlisting><para lang="en">when used where such patterns are valid.</para><para lang="en">Two of the most common design variations in fonts used to display text  are the presence or absence of serifs and the choice between proportional or  regularly spaced (monospaced) characters. Combining these two design  variations yields four generic font designs:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Serif proportionally spaced</para></listitem><listitem lang="en"><para lang="en">Sans serif proportionally spaced</para></listitem><listitem lang="en"><para lang="en">Serif monospaced</para></listitem><listitem lang="en"><para lang="en">Sans serif monospaced</para></listitem></itemizedlist><para lang="en">Common examples of each of these four designs (in corresponding order)  are:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Times Roman</para></listitem><listitem lang="en"><para lang="en">Helvetica</para></listitem><listitem lang="en"><para lang="en">Courier</para></listitem><listitem lang="en"><para lang="en">Lucida Typewriter</para></listitem></itemizedlist><para lang="en">Each of these designs for text fonts typically come in four styles  (combinations of weight and slant):</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Plain</para></listitem><listitem lang="en"><para lang="en">Bold</para></listitem><listitem lang="en"><para lang="en">Italic</para></listitem><listitem lang="en"><para lang="en">Bold-italic</para></listitem></itemizedlist><para lang="en">The four styles of each of the four design variations yield 16 generic  font variations. These 16 generic fonts are among the most commonly used in  general desktop computing. For example, Times Roman, Helvetica, and Courier,  each in the four style variations, along with the Symbol font, constitute the  <emphasis lang="en">Adobe\256 13</emphasis>--the minimum set of fonts built into  all PostScript printers. </para><para lang="en">Your application might not require an exact font family or name, but  will need to use, for example, a monospaced font, a sans serif font, or a  serif font. You do not have to know the exact font names present on a  particular Common Desktop Environment platform. The Common Desktop Environment  standard fonts default to the vendor's selection of the best font of a  particular design on the vendor's platform.</para><para lang="en">Specify the XLFD font names for the standard application fonts your  application needs as font resource values in the application's  <filename moreinfo="none" lang="en">app-defaults</filename> file. If you do not use these font names,  you might need to supply a different app-defaults file for each application on  each Common Desktop Environment platform.  <indexterm significance="normal" id="recinteg-ix290" lang="en"><primary lang="en">XLFD font names</primary></indexterm> <indexterm significance="normal" id="recinteg-ix291" lang="en"><primary lang="en">fonts</primary><secondary lang="en">XLFD</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix292" lang="en"><primary lang="en">standard font names</primary><secondary lang="en">XLFD font names</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix293" lang="en"><primary lang="en">app-defaults file</primary></indexterm> <indexterm significance="normal" id="recinteg-ix294" lang="en"><primary lang="en">standard font names</primary><secondary lang="en">app-defaults file</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix295" lang="en"><primary lang="en">application fonts</primary></indexterm> <indexterm significance="normal" id="recinteg-ix296" lang="en"><primary lang="en">fonts</primary><secondary lang="en">application</secondary></indexterm></para></sect2><sect2 id="recinteg-12" lang="en"><title lang="en">Interface Fonts</title><indexterm significance="normal" id="recinteg-ix297" lang="en"><primary lang="en">interface fonts</primary></indexterm><indexterm significance="normal" id="recinteg-ix298" lang="en"><primary lang="en">fonts</primary><secondary lang="en">interface</secondary></indexterm><indexterm significance="normal" id="recinteg-ix299" lang="en"><primary lang="en">standard font names</primary><secondary lang="en">interface fonts</secondary></indexterm><para lang="en">Interface fonts are the small set of finely optimized fonts that define  the look of the desktop on a particular platform. These fonts cleanly and  quickly convey small amounts of information, such as that appearing in window  titles, buttons, menus, and text fields. </para><para lang="en">The desktop and the Motif toolkit widgets use interface fonts. Do not  use these fonts directly within your application windows. </para><para lang="en">The standard interface font names are different from the standard  application font names. They, like the application font names, are mapped to  different fonts on different Common Desktop Environment platforms. Interface  fonts come in three styles:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><emphasis lang="en">System</emphasis>--Read-only text (used for limited  amounts of text, for example, on menus, buttons, and labels)</para></listitem><listitem lang="en"><para lang="en"><emphasis lang="en">User</emphasis>--Text the end user enters, or text  appearing in objects built from <literal moreinfo="none" lang="en">XmText</literal>-type and  <literal moreinfo="none" lang="en">DtTerm</literal>-type widgets</para></listitem><listitem lang="en"><para lang="en"><emphasis lang="en">User bold</emphasis>--Like the User font, but in  bold</para></listitem></itemizedlist><para lang="en">Each style comes in seven sizes. Using the Style Manager, users can  choose the size of interface fonts they want on their  desktop.<indexterm significance="normal" id="recinteg-ix300" lang="en"><primary lang="en">Style Manager</primary></indexterm><indexterm significance="normal" id="recinteg-ix301" lang="en"><primary lang="en">fonts</primary><secondary lang="en">interface</secondary><tertiary lang="en">and the Style Manager</tertiary></indexterm></para></sect2><sect2 id="recinteg-13" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="recinteg-ix302" lang="en"><primary lang="en">standard font names</primary><secondary lang="en">demo programs</secondary></indexterm><para lang="en">The drawing program demo in  <filename moreinfo="none" lang="en">/usr/dt/examples/template</filename> does not specify any of its own  interface fonts. It serves as an example of how the Common Desktop Environment  Motif interface fonts appear. However, this demo does not take advantage of  application fonts.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on standard fonts, see the relevant man  pages--particularly <literal moreinfo="none" lang="en">DtStdAppFontNames(5)</literal> and  <literal moreinfo="none" lang="en">DtStdInterfaceFontNames(5)</literal> for the list of XLFD font  names--and the <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.  <indexterm significance="normal" id="recinteg-ix303" lang="en"><primary lang="en">XLFD font names</primary></indexterm> <indexterm significance="normal" id="recinteg-ix304" lang="en"><primary lang="en">fonts</primary><secondary lang="en">XLFD</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix305" lang="en"><primary lang="en">fonts</primary><secondary lang="en">standard font names</secondary></indexterm> <indexterm significance="normal" id="recinteg-ix306" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">font use</secondary></indexterm></para></sect2></sect1><sect1 id="recinteg-96916" lang="en"><title lang="en">Displaying Error Messages from Your Application</title><indexterm significance="normal" id="recinteg-ix307" lang="en"><primary lang="en">error messages</primary><secondary lang="en">displaying</secondary></indexterm><indexterm significance="normal" id="recinteg-ix308" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">error message display</secondary></indexterm><para lang="en">Applications in the Common Desktop Environment follow a common model for  presenting error messages and warnings. Users running your application expect  messages to be displayed in message footers, error dialog boxes, or warning  dialog boxes, with further explanations available in online help, when  appropriate.</para><para lang="en">This section outlines conventions for displaying error messages in your  application. Because of the way message text is handled, it is important to  follow these error presentation guidelines precisely. For example, casual  users who start your application from the Front Panel never see messages that  you send to standard error or standard out. In the Common Desktop Environment,  such messages are directed to log files (<filename moreinfo="none" lang="en">$HOME/.dt/*log</filename>)  that many users do not routinely examine or know about.</para><sect2 id="recinteg-14" lang="en"><title lang="en">How to Present Error Messages</title><indexterm significance="normal" id="recinteg-ix309" lang="en"><primary lang="en">error messages</primary><secondary lang="en">how to display</secondary></indexterm><para lang="en">Follow these rules when deciding where to tell users about warnings,  messages, and error conditions:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><emphasis lang="en">If this message is informational,</emphasis> display the text  in the message footer of the application. (Example:  "<filename moreinfo="none" lang="en">MyDoc</filename> file copied.")</para></listitem><listitem lang="en"><para lang="en"><emphasis lang="en">If this message is about an error or serious  warning</emphasis>--a problem where an operation important to the user  has failed--display an error dialog box or warning dialog box.</para></listitem></itemizedlist></sect2><sect2 id="recinteg-15" lang="en"><title lang="en">What Information to Present in Error Dialogs</title><indexterm significance="normal" id="recinteg-ix310" lang="en"><primary lang="en">error messages</primary><secondary lang="en">information to present in error dialogs</secondary></indexterm><para lang="en">A good error dialog or warning dialog gives a user the following  information:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">What happened (from the user's point of view)</para></listitem><listitem lang="en"><para lang="en">Why it happened, in simple language</para></listitem><listitem lang="en"><para lang="en">How to fix the problem</para></listitem></itemizedlist></sect2><sect2 id="recinteg-16" lang="en"><title lang="en">Linking Message Dialogs to Online Help</title><indexterm significance="normal" id="recinteg-ix311" lang="en"><primary lang="en">error messages</primary><secondary lang="en">linking message dialogs to online help</secondary></indexterm><para lang="en">In cases where additional background information is required, or where  it takes more than four or five lines of a dialog to completely explain an  error, add a button that links the user to the appropriate section of online  help.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For details on displaying error messages in your application and linking  message dialogs to online help, see the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.<indexterm significance="normal" id="recinteg-ix312" lang="en"><primary lang="en">error messages</primary><secondary lang="en">displaying</secondary></indexterm><indexterm significance="normal" id="recinteg-ix313" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">error message display</secondary></indexterm></para></sect2></sect1><sect1 id="recinteg-11521" lang="en"><title lang="en">User Customization Issues</title><indexterm significance="normal" id="recinteg-ix314" lang="en"><primary lang="en">user customization issues</primary></indexterm><indexterm significance="normal" id="recinteg-ix315" lang="en"><primary lang="en">customization</primary><secondary lang="en">user issues</secondary></indexterm><para lang="en">This section presents guidelines to follow when designing your  application's user interface.</para><sect2 id="recinteg-17" lang="en"><title lang="en">Color Use</title><indexterm significance="normal" id="recinteg-ix316" lang="en"><primary lang="en">user customization issues</primary><secondary lang="en">color use</secondary></indexterm><indexterm significance="normal" id="recinteg-ix317" lang="en"><primary lang="en">color use and user customization</primary></indexterm><indexterm significance="normal" id="recinteg-ix318" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">color use</secondary></indexterm><para lang="en">When you design your application's user interface, do not specify  color settings that override the default color scheme that the Common Desktop  Environment provides for Motif and desktop widgets. For application-defined  colors, use the following colors to promote sharing with other desktop  applications:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Black</para></listitem><listitem lang="en"><para lang="en">White</para></listitem><listitem lang="en"><para lang="en">Red</para></listitem><listitem lang="en"><para lang="en">Green</para></listitem><listitem lang="en"><para lang="en">Blue</para></listitem><listitem lang="en"><para lang="en">Yellow</para></listitem><listitem lang="en"><para lang="en">Cyan</para></listitem><listitem lang="en"><para lang="en">Magenta</para></listitem><listitem lang="en"><para lang="en">Gray (eight shades: #de, #bd, #ab, #94, #73, #63, #42, and #21)</para></listitem></itemizedlist><para lang="en">In most cases, you should not specify colors, so that your application  uses the colors chosen by the end user in the desktop Style Manager.</para></sect2><sect2 id="recinteg-18" lang="en"><title lang="en">Font Use</title><indexterm significance="normal" id="recinteg-ix319" lang="en"><primary lang="en">user customization issues</primary><secondary lang="en">font use</secondary></indexterm><indexterm significance="normal" id="recinteg-ix320" lang="en"><primary lang="en">fonts</primary><secondary lang="en">user customization issues</secondary></indexterm><indexterm significance="normal" id="recinteg-ix321" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">font use</secondary></indexterm><para lang="en">For your Motif widgets, use the fonts supplied by the Common Desktop  Environment so that your application's windows look like other desktop  client windows and so that users can change the size of these fonts using the  Style Manager. If you override the supplied fonts by changing the Motif  fontList resource specifications, then you must provide additional  functionality if you want users to be able to customize the fonts in your  application.</para><para lang="en">Use the fonts from the Common Desktop Environment standard application  font names to specify--in your app-defaults file--resources you use  within your application (aside from the ones Motif uses for its widgets). This  ensures that your application finds the appropriate fonts on all Common  Desktop Environment platforms, which makes your application more portable  across such platforms. For more information, see  <link linkend="recinteg-56283" lang="en">"Standard Font Names"</link>  .<indexterm significance="normal" id="recinteg-ix322" lang="en"><primary lang="en">app-defaults file</primary></indexterm></para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">The Style Manager only controls fonts for applications written using  Motif version 1.2 or later. It will <emphasis lang="en">not</emphasis> supply correct  fonts for Motif 1.1 (or earlier) applications. These applications must specify  their own fonts in the <literal moreinfo="none" lang="en">app-defaults</literal>  file.<indexterm significance="normal" id="recinteg-ix323" lang="en"><primary lang="en">Style Manager</primary></indexterm></para></note></sect2><sect2 id="recinteg-19" lang="en"><title lang="en">Accessibility</title><indexterm significance="normal" id="recinteg-ix324" lang="en"><primary lang="en">user customization issues</primary><secondary lang="en">accessibility</secondary></indexterm><indexterm significance="normal" id="recinteg-ix325" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">accessibility</secondary></indexterm><para lang="en">This section provides guidelines for making software applications  accessible to people with disabilities.</para><sect3 id="recinteg-20" lang="en"><title lang="en">Physical Disabilities</title><indexterm significance="normal" id="recinteg-ix326" lang="en"><primary lang="en">accessibility</primary><secondary lang="en">physical disabilities</secondary></indexterm><indexterm significance="normal" id="recinteg-ix327" lang="en"><primary lang="en">physical disabilities and user customization</primary></indexterm><indexterm significance="normal" id="recinteg-ix328" lang="en"><primary lang="en">disabilities and user customization</primary><secondary lang="en">physical</secondary></indexterm><para lang="en">Provide keyboard access to all application features, such as those  usually accessible through menus or drag and drop, to enable people with  physical disabilities to more easily use your application.</para></sect3><sect3 id="recinteg-21" lang="en"><title lang="en">Visual Disabilities</title><indexterm significance="normal" id="recinteg-ix329" lang="en"><primary lang="en">accessibility</primary><secondary lang="en">visual disabilities</secondary></indexterm><indexterm significance="normal" id="recinteg-ix330" lang="en"><primary lang="en">visual disabilities and user customization</primary></indexterm><indexterm significance="normal" id="recinteg-ix331" lang="en"><primary lang="en">disabilities and user customization</primary><secondary lang="en">visual</secondary></indexterm><para lang="en">Follow these guidelines to make your application more accessible to  people with visual disabilities:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Do not hardcode application colors.</para></listitem><listitem lang="en"><para lang="en">Do not hardcode graphic attributes such as line, border, and shadow  thickness. These attributes should scale with font size.</para></listitem><listitem lang="en"><para lang="en">Do not hardcode font sizes and styles.</para></listitem><listitem lang="en"><para lang="en">Provide descriptive names for all widgets. In particular, include  descriptive names <emphasis lang="en">in your application code</emphasis> for widgets  that do not display labels on the screen; for example, palette items or icons.  This often enables screen-reading software to provide descriptive information  to blind users.</para></listitem></itemizedlist></sect3><sect3 id="recinteg-22" lang="en"><title lang="en">Hearing Disabilities</title><indexterm significance="normal" id="recinteg-ix332" lang="en"><primary lang="en">accessibility</primary><secondary lang="en">hearing disabilities</secondary></indexterm><indexterm significance="normal" id="recinteg-ix333" lang="en"><primary lang="en">hearing disabilities and user customization</primary></indexterm><indexterm significance="normal" id="recinteg-ix334" lang="en"><primary lang="en">disabilities and user customization</primary><secondary lang="en">hearing</secondary></indexterm><para lang="en">Follow these guidelines to make your application more accessible to  people with hearing disabilities:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Never assume that an end user will hear an audible notification.</para></listitem><listitem lang="en"><para lang="en">Where appropriate, allow end users to choose between audible or visual  cues.</para></listitem><listitem lang="en"><para lang="en">Do not overuse or rely exclusively on audible cues.</para></listitem><listitem lang="en"><para lang="en">Enable end users to configure frequency and volume of audible  cues.</para></listitem></itemizedlist></sect3><sect3 id="recinteg-23" lang="en"><title lang="en">Language, Cognitive, and Other Disabilities</title><indexterm significance="normal" id="recinteg-ix335" lang="en"><primary lang="en">accessibility</primary><secondary lang="en">language, cognitive, and other disabilities</secondary></indexterm><indexterm significance="normal" id="recinteg-ix336" lang="en"><primary lang="en">language disabilities and user customization</primary></indexterm><indexterm significance="normal" id="recinteg-ix337" lang="en"><primary lang="en">disabilities and user customization</primary><secondary lang="en">language, cognitive, and other</secondary></indexterm><para lang="en">The access guidelines outlined for visual, hearing, and physical  disabilities typically benefit end users with cognitive, language, and other  disabilities. In addition to those guidelines, include tear-off menus and  user-configurable menus for important application features whenever  possible.<indexterm significance="normal" id="recinteg-ix338" lang="en"><primary lang="en">user customization issues</primary><secondary lang="en">accessibility</secondary></indexterm><indexterm significance="normal" id="recinteg-ix339" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">accessibility</secondary></indexterm></para></sect3></sect2><sect2 id="recinteg-24" lang="en"><title lang="en">Mouse Double-Click Speed</title><indexterm significance="normal" id="recinteg-ix340" lang="en"><primary lang="en">mouse double-click speed</primary></indexterm><indexterm significance="normal" id="recinteg-ix341" lang="en"><primary lang="en">guidelines</primary><secondary lang="en">mouse double-click speed</secondary></indexterm><indexterm significance="normal" id="recinteg-ix342" lang="en"><primary lang="en">user customization issues</primary><secondary lang="en">mouse double-click speed</secondary></indexterm><para lang="en">For the end user to experience consistency across applications, you  should not hardcode double-click durations into your application or  <filename moreinfo="none" lang="en">app-defaults</filename> files. This way, when the user changes the  double-click time in the Style Manager, your application responds along with  the other desktop applications.  <indexterm significance="normal" id="recinteg-ix343" lang="en"><primary lang="en">app-defaults file</primary></indexterm> <indexterm significance="normal" id="recinteg-ix344" lang="en"><primary lang="en">Style Manager</primary></indexterm></para></sect2><sect2 id="recinteg-25" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="recinteg-ix345" lang="en"><primary lang="en">user customization issues</primary><secondary lang="en">demo program</secondary></indexterm><para lang="en">The drawing program demo in  <filename moreinfo="none" lang="en">/usr/dt/examples/template</filename> uses the Common Desktop  Environment's default colors and fonts. This enables the user to  customize the colors and fonts in this program by using the Style Manager.  Read the <filename moreinfo="none" lang="en">README</filename> file for detailed information on this  demo.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on user customization issues, see the  <olink targetpartnumber="805-3913"><citetitle lang="en">Common Desktop Environment: Style Guide and Certification Checklist</citetitle></olink>.<indexterm significance="normal" id="recinteg-ix346" lang="en"><primary lang="en">customization</primary><secondary lang="en">user issues</secondary></indexterm><indexterm significance="normal" id="recinteg-ix347" lang="en"><primary lang="en">recommended integration</primary></indexterm><indexterm significance="normal" id="recinteg-ix348" lang="en"><primary lang="en">levels of integration</primary><secondary lang="en">recommended</secondary></indexterm><indexterm significance="normal" id="recinteg-ix349" lang="en"><primary lang="en">integration</primary><secondary lang="en">recommended</secondary></indexterm></para></sect2></sect1></chapter><chapter id="optinteg-74877" lang="en"><gentext type="text">Chapter 7</gentext><gentext type="toc">7.  Optional Integration</gentext><title lang="en">Optional Integration</title><highlights lang="en"><para lang="en">The Common Desktop Environment components discussed in this chapter  enable you to leverage services provided by the desktop for achieving  specialized tasks.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"><link linkend="optinteg-56937" lang="en">"Common Desktop Environment Motif Control Widgets"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="optinteg-89138" lang="en">"Data Typing"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="optinteg-56005" lang="en">"Action Invocation"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="optinteg-30393" lang="en">"Workspace Manager"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="optinteg-40248" lang="en">"Terminal Emulator Widget"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="optinteg-39167" lang="en">"Text Editor Widget"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="optinteg-13739" lang="en">"Calendar"</link> </para></listitem><listitem lang="en"><para lang="en"><link linkend="optinteg-44948" lang="en">"Desktop Korn Shell (dtksh)"</link> </para></listitem></itemizedlist><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">In addition to incorporating any components described in this section  into your application, you should also follow the basic integration steps  outlined in <link linkend="basicinteg-27679" lang="en">Chapter 5, Basic Application Integration					</link>. The components discussed in <link linkend="recinteg-88933" lang="en">Chapter 6, Recommended Integration</link> are critical to making your application highly integrated with the  desktop.</para></note><para lang="en">For more information on optional integration, see the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></highlights><indexterm significance="normal" id="optinteg-ix350" lang="en"><primary lang="en">optional integration</primary></indexterm><indexterm significance="normal" id="optinteg-ix351" lang="en"><primary lang="en">integration</primary><secondary lang="en">optional</secondary></indexterm><indexterm significance="normal" id="optinteg-ix352" lang="en"><primary lang="en">levels of integration</primary><secondary lang="en">optional</secondary></indexterm><sect1 id="optinteg-56937" lang="en"><title lang="en">Common Desktop Environment Motif Control Widgets</title><para lang="en">The Common Desktop Environment Motif control widgets are designed to  ease porting OPEN LOOK and Microsoft Windows applications to the Common  Desktop Environment by providing equivalent functionality in Common Desktop  Environment Motif. The Common Desktop Environment Motif widgets library  <literal moreinfo="none" lang="en">libDtWidget</literal> contains widgets and functions that are used to  provide common functionality across all Common Desktop Environment  applications. The widgets provided include:  <indexterm significance="normal" id="optinteg-ix353" lang="en"><primary lang="en">widget</primary><secondary lang="en">Common Desktop Environment</secondary></indexterm> <indexterm significance="normal" id="optinteg-ix354" lang="en"><primary lang="en">OPEN LOOK</primary></indexterm> <indexterm significance="normal" id="optinteg-ix355" lang="en"><primary lang="en">Microsoft Windows</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Text field and arrow button widget (<literal moreinfo="none" lang="en">DtSpinBox)</literal>  <indexterm significance="normal" id="optinteg-ix356" lang="en"><primary lang="en">text field and arrow button widget (DtSpinBox)</primary></indexterm> <indexterm significance="normal" id="optinteg-ix357" lang="en"><primary lang="en">DtSpinBox</primary></indexterm> <indexterm significance="normal" id="optinteg-ix358" lang="en"><primary lang="en">Common Desktop Environment widgets</primary><secondary lang="en">DtSpinBox</secondary></indexterm></para><figure float="0" id="optinteg-fig-1" lang="en"><gentext type="text">Figure 7-1 </gentext><title lang="en">Example of text field and arrow button widget  (<literal moreinfo="none" lang="en">DtSpinBox</literal>)</title><graphic filename="figures/SpinBox.tiff.gif" width="109" depth="236" id="gr3" lang="en"/></figure></listitem><listitem lang="en"><para lang="en">Text field and list box widget (<literal moreinfo="none" lang="en">DtComboBox)</literal>  <indexterm significance="normal" id="optinteg-ix359" lang="en"><primary lang="en">text field and list box widget (DtComboBox)</primary></indexterm> <indexterm significance="normal" id="optinteg-ix360" lang="en"><primary lang="en">DtComboBox</primary></indexterm> <indexterm significance="normal" id="optinteg-ix361" lang="en"><primary lang="en">Common Desktop Environment widgets</primary><secondary lang="en">DtComboBox</secondary></indexterm></para><figure float="0" id="optinteg-fig-2" lang="en"><gentext type="text">Figure 7-2 </gentext><title lang="en">Examples of text field and list box widget  (<literal moreinfo="none" lang="en">DtComboBox</literal>)</title><graphic filename="figures/ComboBox.tiff.gif" width="96" depth="172" id="gr4" lang="en"/><graphic filename="figures/ComboBox3.tiff.gif" width="98" depth="209" id="gr5" lang="en"/></figure></listitem><listitem lang="en"><para lang="en">Menu button widget  (<literal moreinfo="none" lang="en">DtMenuButton)</literal><indexterm significance="normal" id="optinteg-ix362" lang="en"><primary lang="en">menu button widget (DtMenuButton)</primary></indexterm><indexterm significance="normal" id="optinteg-ix363" lang="en"><primary lang="en">DtMenuButton</primary></indexterm><indexterm significance="normal" id="optinteg-ix364" lang="en"><primary lang="en">Common Desktop Environment widgets</primary><secondary lang="en">DtMenuButton</secondary></indexterm></para><figure float="0" id="optinteg-fig-3" lang="en"><gentext type="text">Figure 7-3 </gentext><title lang="en">Example of menu button widget (<literal moreinfo="none" lang="en">DtMenuButton</literal>)</title><graphic filename="figures/MenuButton2.tiff.gif" width="134" depth="101" id="gr6" lang="en"/></figure></listitem></itemizedlist><para lang="en">The Common Desktop Environment Motif Widget library  <literal moreinfo="none" lang="en">libDtWidget</literal> supports drivability between Common Desktop  Environment applications and legacy OPEN LOOK applications. That is, it  enables you to write applications that operate the same way OPEN LOOK  applications do, in areas such as cut, copy, paste, and mouse-button  functionality.</para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">The Common Desktop Environment supports all Motif 1.2 widgets. See  <link linkend="motifapp-53739" lang="en">Appendix A, Common Desktop Environment Motif</link>  ," for more information on Common Desktop Environment  Motif.<indexterm significance="normal" id="optinteg-ix365" lang="en"><primary lang="en">Motif 1.2</primary></indexterm><indexterm significance="normal" id="optinteg-ix366" lang="en"><primary lang="en">widget</primary><secondary lang="en">Motif 1.2</secondary></indexterm></para></note><para lang="en"/><table frame="topbot" id="optinteg-tbl-4" lang="en"><gentext type="text">Table 7-1 </gentext><title lang="en">Common Desktop Environment Control Widgets</title><tgroup cols="2" colsep="0" rowsep="0" lang="en"><colspec colnum="1" colname="column1" colwidth="2*"/><colspec colnum="2" colname="column2" colwidth="7*"/><thead lang="en"><row rowsep="1" lang="en"><entry colname="column1" align="left" valign="bottom" lang="en"><para lang="en">Widget  Name</para></entry><entry colname="column2" align="left" valign="bottom" lang="en"><para lang="en">Description</para></entry></row></thead><tbody lang="en"><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtSpinBox</literal></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">TextField</literal>  widget with additional controls for incrementing and decrementing numeric  values, or browsing through and selecting from a list of text  strings</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtComboBox</literal></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Combination of  <literal moreinfo="none" lang="en">TextField</literal> and pop-up List widgets that provides a list of  valid choices for the <literal moreinfo="none" lang="en">TextField</literal></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">DtMenuButton</literal></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Command widget that  provides menu cascading functionality of an <literal moreinfo="none" lang="en">XmCascadeButton</literal>  widget outside of a Menu Bar, or a Menu Pane (a pull-down menu, a pop-up menu,  or an option menu)</para></entry></row></tbody></tgroup></table><sect2 id="optinteg-5" lang="en"><title lang="en">Compatibility with Motif 2.1</title><para lang="en">The APIs of the <literal moreinfo="none" lang="en">DtSpinBox</literal> and  <literal moreinfo="none" lang="en">DtComboBox</literal> widgets are similar to the Motif 2.1 release of  <literal moreinfo="none" lang="en">XmSpinBox</literal> and <literal moreinfo="none" lang="en">XmComboBox</literal> widgets. The  APIs are designed so an application can easily switch to the Motif 2.1 version  of these widgets. To switch, change the <literal moreinfo="none" lang="en">Dt</literal> names for the  class, types, and creation routines to <literal moreinfo="none" lang="en">Xm</literal>. For example,  change all occurrences of <literal moreinfo="none" lang="en">DtSpinBox</literal> in your code to  <literal moreinfo="none" lang="en">XmSpinBox</literal>. This information is supplied in case you choose  to port your application to Motif 2.1, but it is <emphasis lang="en">not</emphasis> a  recommendation that you do  so.<indexterm significance="normal" id="optinteg-ix367" lang="en"><primary lang="en">Motif 2.0</primary></indexterm></para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">The Common Desktop Environment does <emphasis lang="en">not</emphasis> guarantee  strict API or binary compatibility between its widgets and the Motif 2.1  widgets.<indexterm significance="normal" id="optinteg-ix368" lang="en"><primary lang="en">compatibility</primary><secondary lang="en">between Common Desktop Environment widgets and Motif 2.1 widgets</secondary></indexterm><indexterm significance="normal" id="optinteg-ix369" lang="en"><primary lang="en">Motif 2.1</primary></indexterm><indexterm significance="normal" id="optinteg-ix370" lang="en"><primary lang="en">widget</primary><secondary lang="en">Motif 2.1</secondary></indexterm></para></note></sect2><sect2 id="optinteg-6" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="optinteg-ix371" lang="en"><primary lang="en">Common Desktop Environment widgets</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The library <literal moreinfo="none" lang="en">libDtWidget</literal> provides access to the  <literal moreinfo="none" lang="en">DtSpinBox</literal>, <literal moreinfo="none" lang="en">DtComboBox</literal>, and  <literal moreinfo="none" lang="en">DtMenuButton</literal> widgets. The <literal moreinfo="none" lang="en">libDtWidget</literal>  header files for these widgets are:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dt/SpinBox.h</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dt/ComboBox.h</filename></para></listitem><listitem lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dt/MenuButton.h</filename></para></listitem></itemizedlist></sect2><sect2 id="optinteg-7" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix372" lang="en"><primary lang="en">Common Desktop Environment widgets</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="optinteg-ix373" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the Common Desktop Environment Motif control widgets demos  in <filename moreinfo="none" lang="en">/usr/dt/examples/dtwidget</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on Common Desktop Environment Motif control  widgets, see the relevant man pages and the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.  <indexterm significance="normal" id="optinteg-ix374" lang="en"><primary lang="en">widget</primary><secondary lang="en">Common Desktop Environment</secondary></indexterm></para></sect2></sect1><sect1 id="optinteg-89138" lang="en"><title lang="en">Data Typing</title><para lang="en">You can define data types when you perform basic integration for your  application. This section focuses on a different aspect of data typing:  extracting information from the actions and data-types database.</para><para lang="en">Data typing provides an extension to the attributes of files and data  beyond what is provided by traditional UNIX file systems. These extensions  include typing and attribute management. Use the data-typing API if your  application receives data from external sources and must act on it. For  example, your application might want to display an icon or execute an action  that has a system-wide  definition.<indexterm significance="normal" id="optinteg-ix375" lang="en"><primary lang="en">UNIX</primary></indexterm></para><para lang="en">Data typing consist of two  parts:<indexterm significance="normal" id="optinteg-ix376" lang="en"><primary lang="en">data typing</primary><secondary lang="en">two parts of</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">A database that stores data criteria and data attributes</para></listitem><listitem lang="en"><para lang="en">A collection of routines that query the database</para></listitem></itemizedlist><para lang="en">The data-typing system determines a type for a file or byte vector based  on a set of criteria. These criteria include its name, permissions, symbolic  link value, and contents. The attributes associated with a type describe its  user-visible interfaces, including a description, the icon to represent it  graphically, and the actions that apply to it. Attributes also exist that name  the interchange formats to which the data conforms.</para><para lang="en">The Common Desktop Environment File Manager and Common Desktop  Environment Mail attachment window use data typing to determine the icon and  actions associated with a file. For example, for a C file  <emphasis lang="en">filename</emphasis>.<filename moreinfo="none" lang="en">c</filename>, File Manager uses the  .<filename moreinfo="none" lang="en">c</filename> extension to determine the file's data type,  C_SOURCE. It then uses C_SOURCE to determine the icon file name for the icon  that it can use for <emphasis lang="en">filename</emphasis>.<filename moreinfo="none" lang="en">c</filename>. </para><sect2 id="optinteg-8" lang="en"><title lang="en">Database Loading</title><indexterm significance="normal" id="optinteg-ix377" lang="en"><primary lang="en">database</primary><secondary lang="en">loading</secondary></indexterm><indexterm significance="normal" id="optinteg-ix378" lang="en"><primary lang="en">data typing</primary><secondary lang="en">database loading</secondary></indexterm><para lang="en">This section discusses the loading API for the actions and data-types  database. The syntax for this and any Common Desktop Environment databases a  developer defines is discussed in man pages in the  <filename moreinfo="none" lang="en">/usr/dt/man/man4</filename> directory. </para><para lang="en">The external database loading API consists of two functions:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en"><function moreinfo="none" lang="en">DtDbLoad<gentext type="text">()</gentext></function></para></listitem><listitem lang="en"><para lang="en"><function moreinfo="none" lang="en">DtDbReloadNotify<gentext type="text">()</gentext></function></para></listitem></itemizedlist><para lang="en"><function moreinfo="none" lang="en">DtDbLoad<gentext type="text">()</gentext></function> reads in the actions and data-types  database. It determines the set of directories that are searched for database  files, and it loads into the database the <filename moreinfo="none" lang="en">.dt</filename> files that  are found. Your application must call <function moreinfo="none" lang="en">DtDbLoad<gentext type="text">()</gentext></function> before  calling any of the routines that query the actions and data-types database.  <indexterm significance="normal" id="optinteg-ix379" lang="en"><primary lang="en">DtDbLoad()</primary></indexterm> <indexterm significance="normal" id="optinteg-ix380" lang="en"><primary lang="en">database</primary><secondary lang="en">DtDbLoad()</secondary></indexterm></para><para lang="en">Use <function moreinfo="none" lang="en">DtDbReLoadNotify<gentext type="text">()</gentext></function> to request notification of  actions and data-types database reload events. It registers an  application's interest in database reload messages.  <indexterm significance="normal" id="optinteg-ix381" lang="en"><primary lang="en">DtDbReLoadNotify()</primary></indexterm> <indexterm significance="normal" id="optinteg-ix382" lang="en"><primary lang="en">database</primary><secondary lang="en">DtDbReLoadNotify()</secondary></indexterm></para><para lang="en">Your application should reload the database whenever it changes, so that  the end user will notice updates without having to restart the  application.</para></sect2><sect2 id="optinteg-9" lang="en"><title lang="en">Database Queries</title><indexterm significance="normal" id="optinteg-ix383" lang="en"><primary lang="en">database</primary><secondary lang="en">query functions</secondary></indexterm><indexterm significance="normal" id="optinteg-ix384" lang="en"><primary lang="en">data typing</primary><secondary lang="en">database query functions</secondary></indexterm><para lang="en">To look up an attribute for a data object, you must first determine the  type of the object and then ask for the appropriate attribute value for that  type. The database query functions enable you to perform operations such as  retrieve type data and attributes, free memory, and load and unload the  database. These functions are documented in the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink> and also in man pages in the  <filename moreinfo="none" lang="en">man3</filename> directory.</para></sect2><sect2 id="optinteg-10" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="optinteg-ix385" lang="en"><primary lang="en">data typing</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The Desktop Services library, <literal moreinfo="none" lang="en">libDtSvc</literal>, provides  access to many desktop APIs, including that for data typing. Include the  <filename moreinfo="none" lang="en">Dt/Dt.h</filename> <filename moreinfo="none" lang="en">and Dt/Dts.h</filename> header files to  access the data-typing API. </para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">If your application uses any of the data-typing APIs, or loads the  actions and data-types database, it must first initialize the  <literal moreinfo="none" lang="en">libDtSvc</literal> library by calling either  <function moreinfo="none" lang="en">DtInitialize<gentext type="text">()</gentext></function> or <function moreinfo="none" lang="en">DtAppInitialize<gentext type="text">()</gentext></function>.  Refer to the <literal moreinfo="none" lang="en">DtInitialize(3)</literal> or  <literal moreinfo="none" lang="en">DtAppInitialize(3)</literal> man page for more information.  <indexterm significance="normal" id="optinteg-ix386" lang="en"><primary lang="en">DtInitialize()</primary></indexterm> <indexterm significance="normal" id="optinteg-ix387" lang="en"><primary lang="en">DtAppInitialize()</primary></indexterm></para></note></sect2><sect2 id="optinteg-11" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix388" lang="en"><primary lang="en">data typing</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="optinteg-ix389" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the data typing demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtdts</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on data typing, see the relevant man pages and the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="optinteg-56005" lang="en"><title lang="en">Action Invocation</title><para lang="en">The action invocation API enables applications to invoke desktop actions  on file or buffer arguments. It chooses a suitable action for the file or  buffer based on the <literal moreinfo="none" lang="en">Class</literal>, <literal moreinfo="none" lang="en">Type</literal>,  <literal moreinfo="none" lang="en">Mode</literal>, and <literal moreinfo="none" lang="en">Number</literal> of the action  arguments. For example, an Open action might invoke an image viewer for GIF  files, a word processor for complex documents, and a simple text editor for  ordinary ASCII files. Your application need not concern itself with the  details of action selection or invocation. </para><para lang="en">Use the action invocation API so that your application uses the same  mechanisms as the rest of the desktop. The user can then experience uniform  desktop behavior.</para><para lang="en">The action functions in the <literal moreinfo="none" lang="en">libDtSvc</literal> library provide  a way to invoke desktop actions (such as Open and Print) for files or buffers.  They contain parameters that enable you to modify an action's behavior.  The action invocation API consists of the following functions:  <indexterm significance="normal" id="optinteg-ix390" lang="en"><primary lang="en">action invocation</primary><secondary lang="en">API</secondary></indexterm></para><informaltable frame="topbot" lang="en"><tgroup cols="2" colsep="0" rowsep="0" lang="en"><colspec colnum="1" colname="column1" colwidth="4*"/><colspec colnum="2" colname="column2" colwidth="5*"/><tbody lang="en"><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><function moreinfo="none" lang="en">DtActionInvoke<gentext type="text">()</gentext></function></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Invokes the specified  action on its arguments, which can be files or buffers</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><function moreinfo="none" lang="en">DtActionLabel<gentext type="text">()</gentext></function></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Provides access to  the localizable label string associated with an action</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><function moreinfo="none" lang="en">DtActionDescription<gentext type="text">()</gentext></function></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"/></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"/></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Returns a string  containing the description information associated with the action your  application called</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><function moreinfo="none" lang="en">DtActionExists<gentext type="text">()</gentext></function></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">a Boolean function  that checks whether a given name corresponds to an existing  action</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"><function moreinfo="none" lang="en">DtActionIcon<gentext type="text">()</gentext></function></para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en">Returns the name of  the icon associated with the specified action</para></entry></row></tbody></tgroup></informaltable><sect2 id="optinteg-12" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="optinteg-ix391" lang="en"><primary lang="en">action invocation</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The desktop services library, <literal moreinfo="none" lang="en">libDtSvc</literal>, provides  access to many desktop APIs, including that for actions. Include the  <filename moreinfo="none" lang="en">Dt/Dt.h</filename> and <filename moreinfo="none" lang="en">Dt/Action.h</filename> header files  to access the actions API.</para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">If your application uses any of the action invocation APIs, it must  first initialize the <literal moreinfo="none" lang="en">libDtSvc</literal> library by calling either  <function moreinfo="none" lang="en">DtInitialize<gentext type="text">()</gentext></function> or <function moreinfo="none" lang="en">DtAppInitialize<gentext type="text">()</gentext></function>.  Refer to the <literal moreinfo="none" lang="en">DtInitialize(3)</literal> or  <literal moreinfo="none" lang="en">DtAppInitialize(3)</literal> man page for more  information.<indexterm significance="normal" id="optinteg-ix392" lang="en"><primary lang="en">DtInitialize()</primary></indexterm><indexterm significance="normal" id="optinteg-ix393" lang="en"><primary lang="en">DtAppInitialize()</primary></indexterm></para></note></sect2><sect2 id="optinteg-13" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix394" lang="en"><primary lang="en">action invocation</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="optinteg-ix395" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the action invocation demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtaction</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on actions, see the relevant man pages and the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="optinteg-30393" lang="en"><title lang="en">Workspace Manager</title><para lang="en">The Common Desktop Environment Workspace Manager provides support for  multiple workspaces. Each workspace is a <emphasis lang="en">virtual screen</emphasis>.  Windows can be placed in a single workspace, all workspaces, or any  combination of individual workspaces. Workspaces can be added, deleted, or  renamed dynamically by the user.</para><para lang="en">The Workspace Manager API provides functions for applications that need  to know in which workspaces their windows reside, or that need to have some  control over how the windows are placed in the workspaces. Additionally, the  API enables applications to monitor changes to the overall workspace state,  such as which workspace is the current one.</para><para lang="en">The Common Desktop Environment does not require applications to use the  Workspace Manager API to run on the desktop. Most desktop applications can run  as expected without knowledge of the Workspace Manager. In particular, if your  application has a single, main, top-level window and complies with ICCCM 1.1  and Motif 1.2, you do not have to integrate with the Common Desktop  Environment Workspace Manager for the application to run on the desktop.  <indexterm significance="normal" id="optinteg-ix396" lang="en"><primary lang="en">Motif 1.2</primary></indexterm></para><para lang="en">However, more complex applications with multiple top-level windows need  to use the Workspace Manager API in conjunction with the Session Manager API  to properly save and restore the application's state. The Workspace  Manager API enables an application to find out which workspaces each of its  windows is in. The API also enables an application to display its windows in  the correct workspace when the session resumes.  <indexterm significance="normal" id="optinteg-ix397" lang="en"><primary lang="en">Session Manager</primary></indexterm></para><para lang="en">The Workspace Manager API addresses the following tasks:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Get information on workspaces</para></listitem><listitem lang="en"><para lang="en">Get and set the current workspace</para></listitem><listitem lang="en"><para lang="en">Notify a client of changes to workspace state</para></listitem><listitem lang="en"><para lang="en">Add and remove workspace functions for a client</para></listitem><listitem lang="en"><para lang="en">Get and set the workspaces occupied by a client</para></listitem><listitem lang="en"><para lang="en">Identify backdrop windows</para></listitem></itemizedlist><para lang="en">All Workspace Manager API functions share the prefix  <literal moreinfo="none" lang="en">DtWsm</literal>. </para><sect2 id="optinteg-14" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="optinteg-ix398" lang="en"><primary lang="en">Workspace Manager</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The desktop services library, <literal moreinfo="none" lang="en">libDtSvc</literal>, provides  access to many desktop APIs, including that for Workspace Manager. Include the  <filename moreinfo="none" lang="en">Dt/Dt.h</filename> and <filename moreinfo="none" lang="en">Dt/Wsm.h</filename> header files to  access the Workspace Manager API.</para><note lang="en" role="note"><gentext type="text">Note - </gentext><para lang="en">If your application uses any of the Workspace Manager APIs, it must  first initialize the <literal moreinfo="none" lang="en">libDtSvc</literal> library by calling either  <function moreinfo="none" lang="en">DtInitialize<gentext type="text">()</gentext></function> or <function moreinfo="none" lang="en">DtAppInitialize<gentext type="text">()</gentext></function>.  Refer to the <literal moreinfo="none" lang="en">DtInitialize(3)</literal> or  <literal moreinfo="none" lang="en">DtAppInitialize(3)</literal> man page for more  information.<indexterm significance="normal" id="optinteg-ix399" lang="en"><primary lang="en">DtInitialize()</primary></indexterm><indexterm significance="normal" id="optinteg-ix400" lang="en"><primary lang="en">DtAppInitialize()</primary></indexterm></para></note></sect2><sect2 id="optinteg-15" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix401" lang="en"><primary lang="en">Workspace Manager</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="optinteg-ix402" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the Workspace Manager demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtwsm</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on Workspace Manager, see the relevant man pages  and the <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="optinteg-40248" lang="en"><title lang="en">Terminal Emulator Widget</title><para lang="en">The <literal moreinfo="none" lang="en">DtTerm</literal> widget provides the functionality required  to emulate an ANSI X3.64-1979-style terminal emulator (specifically a DEC  VT220-like terminal with extensions). The Terminal Emulator widget library,  <literal moreinfo="none" lang="en">libDtTerm,</literal> provides the <literal moreinfo="none" lang="en">DtTerm</literal> widget  for use in adding a terminal emulator window to a GUI. If you include a  terminal emulator in your application, use Common Desktop Environment Motif  widgets to add display enhancements to it such as pop-up menus and scroll  bars. <indexterm significance="normal" id="optinteg-ix403" lang="en"><primary lang="en">DEC VT220</primary></indexterm> <indexterm significance="normal" id="optinteg-ix404" lang="en"><primary lang="en">Terminal Emulator</primary><secondary lang="en">DEC VT220-like</secondary></indexterm> <indexterm significance="normal" id="optinteg-ix405" lang="en"><primary lang="en">widget</primary><secondary lang="en">DtTerm</secondary></indexterm> <indexterm significance="normal" id="optinteg-ix406" lang="en"><primary lang="en">Terminal Emulator</primary><secondary lang="en">DtTerm widget</secondary></indexterm></para><para lang="en">The Common Desktop Environment Terminal Emulator, which is a part of the  run-time environment, is a window that behaves as a terminal, enabling access  to traditional terminal-based applications from within the desktop. The  <literal moreinfo="none" lang="en">DtTerm</literal> widget is the foundation for the desktop run-time  terminal emulator,  <literal moreinfo="none" lang="en">dtterm</literal>.<indexterm significance="normal" id="optinteg-ix407" lang="en"><primary lang="en">run-time</primary><secondary lang="en">terminal emulator</secondary></indexterm></para><para lang="en">The <literal moreinfo="none" lang="en">libDtTerm</literal> library includes a set of convenience  functions to create, access, and support the <literal moreinfo="none" lang="en">DtTerm</literal> widget. </para><sect2 id="optinteg-16" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="optinteg-ix408" lang="en"><primary lang="en">Terminal Emulator Widget</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The <literal moreinfo="none" lang="en">libDtTerm</literal> library provides a set of widgets based  on Motif for designing a terminal emulator or for adding a terminal emulator  window to a GUI.</para><para lang="en">Include the <filename moreinfo="none" lang="en">Dt/Term.h</filename> header file to access  <literal moreinfo="none" lang="en">libDtTerm</literal> APIs in your application.</para></sect2><sect2 id="optinteg-17" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix409" lang="en"><primary lang="en">Terminal Emulator Widget</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="optinteg-ix410" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the Terminal Emulator demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtterm</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on the <literal moreinfo="none" lang="en">DtTerm</literal> widget, see the  relevant man pages.</para><para lang="en">For more information on the desktop terminal emulator, see the terminal  emulator help volume, the relevant man pages, or the  <olink targetpartnumber="805-3899"><citetitle lang="en">Solaris Common Desktop Environment: User's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="optinteg-39167" lang="en"><title lang="en">Text Editor Widget</title><para lang="en">The Common Desktop Environment text editing system consists of two  components:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">The text editor application, <literal moreinfo="none" lang="en">dtpad</literal>, which provides  editing services through graphical, action, and ToolTalk interfaces  <indexterm significance="normal" id="optinteg-ix411" lang="en"><primary lang="en">dtpad</primary></indexterm> <indexterm significance="normal" id="optinteg-ix412" lang="en"><primary lang="en">Text Editor</primary><secondary lang="en">dtpad</secondary></indexterm></para></listitem><listitem lang="en"><para lang="en">The editor widget, <literal moreinfo="none" lang="en">DtEditor</literal>, which provides a  programmatic interface for the following editing  services:<indexterm significance="normal" id="optinteg-ix413" lang="en"><primary lang="en">Text Editor</primary><secondary lang="en">DtEditor widget</secondary></indexterm><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Cut and paste</para></listitem><listitem lang="en"><para lang="en">Search and replace</para></listitem><listitem lang="en"><para lang="en">Simple formatting</para></listitem><listitem lang="en"><para lang="en">Spell checking (for 8-bit locales)</para></listitem><listitem lang="en"><para lang="en">Undo previous edit</para></listitem><listitem lang="en"><para lang="en">Enhanced I/O handling capabilities that support input and output of  ASCII text, multibyte text, and buffers of data</para></listitem><listitem lang="en"><para lang="en">Support for reading and writing files directly</para></listitem></itemizedlist></para></listitem></itemizedlist><para lang="en">Although the Motif text widget also provides a programmatic interface,  applications that want to assure a system-wide uniform editor should use the  <literal moreinfo="none" lang="en">DtEditor</literal> widget. The Common Desktop Environment Text Editor  and Mailer use the editor widget. Use this widget in the following  circumstances:<indexterm significance="normal" id="optinteg-ix414" lang="en"><primary lang="en">Text Editor</primary><secondary lang="en">when to use widget</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">You need the functionality, such as spell checking, undo, and  find/change, that is provided by the <literal moreinfo="none" lang="en">DtEditor</literal>  widget.</para></listitem><listitem lang="en"><para lang="en">You want users to be able to read and write data to and from a  file.</para></listitem><listitem lang="en"><para lang="en">When your program does not need to edit the text while the widget has  control of the text.<indexterm significance="normal" id="optinteg-ix415" lang="en"><primary lang="en">Text Editor</primary><secondary lang="en">when to use widget</secondary></indexterm></para></listitem></itemizedlist><sect2 id="optinteg-18" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="optinteg-ix416" lang="en"><primary lang="en">Text Editor</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The <literal moreinfo="none" lang="en">DtEditor</literal> widget is in the  <literal moreinfo="none" lang="en">libDtWidget</literal> library. The header file is  <filename moreinfo="none" lang="en">Dt/Editor.h</filename>.</para></sect2><sect2 id="optinteg-19" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix417" lang="en"><primary lang="en">Text Editor</primary><secondary lang="en">demo programs</secondary></indexterm><para lang="en">A demo containing an example of the <literal moreinfo="none" lang="en">DtEditor</literal> widget  (<filename moreinfo="none" lang="en">editor.c</filename>) is in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtwidget</filename> directory. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demo.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on the Text Editor widget, see the relevant man  pages and the<olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="optinteg-13739" lang="en"><title lang="en">Calendar</title><para lang="en">The Common Desktop Environment Calendar comprises the infrastructure and  API that enables users to schedule their time and resources in a networked  environment. The Calendar GUI is part of the Common Desktop Environment  run-time environment.<indexterm significance="normal" id="optinteg-ix418" lang="en"><primary lang="en">run-time</primary><secondary lang="en">Calendar GUI</secondary></indexterm></para><para lang="en">Calendar consists of:</para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">A daemon that manages the calendar database</para></listitem><listitem lang="en"><para lang="en">A calendar and scheduling API that defines a set of high-level functions  so that calendar-enabled applications can access the functionality supported  by the daemon</para></listitem><listitem lang="en"><para lang="en">A library implementation of the calendar and scheduling API</para></listitem></itemizedlist><para lang="en">Additionally, it provides a user interface for both GUI and TTY  interaction. The system supports entering, deleting, and modifying calendar  entries, as well as browsing and search features. You can access all this  functionality through the network.</para><para lang="en">The development environment provides a library for client access to the  Calendar data. It is extensible in that it allows users to define their own  calendar entry attributes.The library provides a client callback mechanism for  notification of database updates.</para><para lang="en">The calendar daemon implements the services behind the library of  calendar and scheduling API calls. It supports deleting, inserting, and  modifying calendar entries. It also manages calendar reminders and supports  the creation and removal of the Calendar database. It also provides mechanisms  for retrieving Calendar data.</para><para lang="en">Calendar entry data integrates with the desktop through drag and drop  and the ToolTalk messaging interfaces.</para><para lang="en">The calendar and scheduling API is an implementation of the X.400  Application Programming Interface Association (XAPIA) Calendaring and  Scheduling API 1.0. Use the calendar and scheduling API to integrate your  application with Calendar, or to develop your own calendar  application.<indexterm significance="normal" id="optinteg-ix419" lang="en"><primary lang="en">X.400 API Association (XAPIA)</primary></indexterm><indexterm significance="normal" id="optinteg-ix420" lang="en"><primary lang="en">Calendar</primary><secondary lang="en">XAPIA</secondary></indexterm></para><sect2 id="optinteg-20" lang="en"><title lang="en">Library and Header Files</title><indexterm significance="normal" id="optinteg-ix421" lang="en"><primary lang="en">Calendar</primary><secondary lang="en">library and header files</secondary></indexterm><para lang="en">The Calendar library, <literal moreinfo="none" lang="en">libcsa</literal>, provides a programmatic  way to access and manage Calendar data in a networked environment.</para><para lang="en">Include the <filename moreinfo="none" lang="en">csa/csa.h</filename> header file to access  <literal moreinfo="none" lang="en">libcsa</literal> APIs in your application.</para></sect2><sect2 id="optinteg-21" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix422" lang="en"><primary lang="en">Calendar</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="optinteg-ix423" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the Calendar demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtcalendar</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on the calendar, see the relevant man pages, the  Calendar help volume, and the  <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para></sect2></sect1><sect1 id="optinteg-44948" lang="en"><title lang="en">Desktop Korn Shell (dtksh)</title><para lang="en">Desktop Korn shell (which is <literal moreinfo="none" lang="en">dtksh</literal>) provides a way to  engage in graphic user interaction through shell scripts. The user interface  capabilities are based on the Common Desktop Environment Motif widget set, the  Xt Intrinsics, and the X11  library.<indexterm significance="normal" id="optinteg-ix424" lang="en"><primary lang="en">dtksh</primary></indexterm><indexterm significance="normal" id="optinteg-ix425" lang="en"><primary lang="en">Desktop KornShell (dtksh)</primary></indexterm></para><para lang="en"><literal moreinfo="none" lang="en">dtksh</literal> is a version of <literal moreinfo="none" lang="en">ksh-93</literal>  extended to access many X, Xt, Motif, and Common Desktop Environment  facilities. <literal moreinfo="none" lang="en">ksh-93</literal> is a version of Korn shell, the command  shell and programming language <literal moreinfo="none" lang="en">ksh</literal>.  <literal moreinfo="none" lang="en">dtksh</literal> extends <literal moreinfo="none" lang="en">ksh</literal> to provide support  for:<indexterm significance="normal" id="optinteg-ix426" lang="en"><primary lang="en">ksh-93</primary></indexterm><indexterm significance="normal" id="optinteg-ix427" lang="en"><primary lang="en">KornShell</primary></indexterm><indexterm significance="normal" id="optinteg-ix428" lang="en"><primary lang="en">Desktop KornShell (dtksh)</primary><secondary lang="en">extension of ksh</secondary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Access to the Common Desktop Environment Motif widget set from within a  shell script</para></listitem><listitem lang="en"><para lang="en">Fully localized shell scripts--<literal moreinfo="none" lang="en">dtksh</literal> scripts can  use <literal moreinfo="none" lang="en">catopen</literal> and <literal moreinfo="none" lang="en">catgets</literal> commands</para></listitem><listitem lang="en"><para lang="en">Access to the Common Desktop Environment application Help system</para></listitem><listitem lang="en"><para lang="en">Response to session-management Save state directives</para></listitem><listitem lang="en"><para lang="en">Access to most of the Common Desktop Environment Desktop Services  Message Set</para></listitem><listitem lang="en"><para lang="en">Access to many of the Common Desktop Environment data-typing API  functions</para></listitem><listitem lang="en"><para lang="en">Access to most of the Common Desktop Environment action API  functions</para></listitem></itemizedlist><sect2 id="optinteg-22" lang="en"><title lang="en">Demo Programs</title><indexterm significance="normal" id="optinteg-ix429" lang="en"><primary lang="en">Desktop KornShell (dtksh)</primary><secondary lang="en">demo programs</secondary></indexterm><indexterm significance="normal" id="optinteg-ix430" lang="en"><primary lang="en">demo programs</primary></indexterm><para lang="en">You can find the <literal moreinfo="none" lang="en">dtksh</literal> demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/dtksh</filename>. Read the  <filename moreinfo="none" lang="en">README</filename> file for detailed information on the demos.</para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on <literal moreinfo="none" lang="en">dtksh</literal>, see the relevant man  pages and <olink targetpartnumber="805-3917"><citetitle lang="en">Common Desktop Environment: Desktop KornShell User's Guide</citetitle></olink>.<indexterm significance="normal" id="optinteg-ix431" lang="en"><primary lang="en">optional integration</primary></indexterm><indexterm significance="normal" id="optinteg-ix432" lang="en"><primary lang="en">integration</primary><secondary lang="en">optional</secondary></indexterm><indexterm significance="normal" id="optinteg-ix433" lang="en"><primary lang="en">levels of integration</primary><secondary lang="en">optional</secondary></indexterm></para></sect2></sect1></chapter></part><appendix id="motifapp-53739" lang="en"><gentext type="text">Appendix A</gentext><gentext type="toc">A.  Common Desktop Environment Motif</gentext><title lang="en">Common Desktop Environment Motif</title><highlights lang="en"><para lang="en">The Common Desktop Environment Motif Toolkit consists of the Motif 2.1  widget library with enhancements to existing functionality and bug fixes, as  well as some new features. </para><para lang="en">In addition, it provides control widgets for graphical user interface objects not found in Motif 2.1. For more information on these widgets, see  <link linkend="optinteg-56937" lang="en">"Common Desktop Environment Motif Control Widgets"</link>   and the <olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>.</para><para lang="en">Common Desktop Environment Motif adds functionality to the Motif 2.1  release while maintaining backward binary compatibility. It is source and  binary compatible with Motif 1.2 applications. Existing Motif 1.2 applications  will compile using Common Desktop Environment Motif. Existing Motif 1.2  binaries will run without modification using Common Desktop Environment  Motif.</para><itemizedlist lang="en" mark="none"><listitem lang="en"><para lang="en"> <link linkend="motifapp-1" lang="en">"Features Added to Motif"</link></para></listitem><listitem lang="en"><para lang="en"><link linkend="motifapp-2" lang="en">"Enhancements to Existing Motif Functionality"</link></para></listitem><listitem lang="en"><para lang="en"><link linkend="motifapp-4" lang="en">"Motif Libraries"</link></para></listitem><listitem lang="en"><para lang="en"><link linkend="motifapp-41258" lang="en">"Demo Programs"</link> </para></listitem></itemizedlist></highlights><indexterm significance="normal" id="motifapp-ix434" lang="en"><primary lang="en">Motif</primary><secondary lang="en">Common Desktop Environment</secondary></indexterm><indexterm significance="normal" id="motifapp-ix435" lang="en"><primary lang="en">compiling</primary><secondary lang="en">Motif 1.2 applications using Common Desktop Environment Motif</secondary></indexterm><indexterm significance="normal" id="motifapp-ix437" lang="en"><primary lang="en">Motif 1.2</primary><secondary lang="en">and Common Desktop Environment Motif</secondary></indexterm><sect1 id="motifapp-1" lang="en"><title lang="en">Features Added to Motif</title><indexterm significance="normal" id="motifapp-ix438" lang="en"><primary lang="en">Common Desktop Environment Motif</primary><secondary lang="en">features added to Motif</secondary></indexterm><indexterm significance="normal" id="motifapp-ix439" lang="en"><primary lang="en">Motif</primary><secondary lang="en">features added to</secondary></indexterm><para lang="en">The Common Desktop Environment added the following  features to  Motif 1.2.3 to support desktop applications: </para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Complete localization of toolkit error messages</para></listitem><listitem lang="en"><para lang="en"><function moreinfo="none" lang="en">XmGetPixmap<gentext type="text">()</gentext></function> and  <function moreinfo="none" lang="en">XmGetPixmapByDepth<gentext type="text">()</gentext></function> use the environment variable  <literal moreinfo="none" lang="en">XMICONSEARCHPATH</literal> or <literal moreinfo="none" lang="en">XMICONBMSEARCHPATH</literal>  as the icon search path. If neither of these variables is set, then they use  <literal moreinfo="none" lang="en">XBLANGPATH</literal>, which is the Motif 1.2 behavior. See the Common  Desktop Environment Motif man page for more information.  <indexterm significance="normal" id="motifapp-ix440" lang="en"><primary lang="en">XmGetPixmap</primary></indexterm> <indexterm significance="normal" id="motifapp-ix441" lang="en"><primary lang="en">XmGetPixmapByDepth</primary></indexterm> <indexterm significance="normal" id="motifapp-ix442" lang="en"><primary lang="en">Common Desktop Environment Motif</primary><secondary lang="en">features added to Motif</secondary></indexterm> <indexterm significance="normal" id="motifapp-ix443" lang="en"><primary lang="en">Motif</primary><secondary lang="en">features added to</secondary></indexterm></para></listitem></itemizedlist></sect1><sect1 id="motifapp-2" lang="en"><title lang="en">Enhancements to Existing Motif Functionality</title><indexterm significance="normal" id="motifapp-ix444" lang="en"><primary lang="en">Motif</primary><secondary lang="en">enhancements to existing functionality</secondary></indexterm><indexterm significance="normal" id="motifapp-ix445" lang="en"><primary lang="en">Common Desktop Environment Motif</primary><secondary lang="en">enhancements to Motif</secondary></indexterm><para lang="en">The Common Desktop Environment Xm library contains  minor enhancements to Motif usability to enable better interoperability with  OPEN LOOK and Microsoft Windows. The usability enhancements include:  <indexterm significance="normal" id="motifapp-ix446" lang="en"><primary lang="en">Microsoft Windows</primary></indexterm></para><itemizedlist lang="en" mark="bullet"><listitem lang="en"><para lang="en">Optionally allowing mouse button 2 on a three-button mouse to be used to  extend the current selection. This is equivalent to the OPEN LOOK Adjust  function.</para></listitem><listitem lang="en"><para lang="en">Allowing Tab to be used to move through a group of  <literal moreinfo="none" lang="en">PushButton</literal> widgets and gadgets,  <literal moreinfo="none" lang="en">ArrowButton</literal> widget and gadgets, and  <literal moreinfo="none" lang="en">DrawnButton</literal> widgets.</para></listitem><listitem lang="en"><para lang="en">Allowing mouse button 3 to activate a CascadeButton menu.</para></listitem><listitem lang="en"><para lang="en">Providing three new resources (<literal moreinfo="none" lang="en">pathMode</literal>,  <literal moreinfo="none" lang="en">fileFilterStyle</literal>, and <literal moreinfo="none" lang="en">dirTextLabelString</literal>)  for the <literal moreinfo="none" lang="en">XmFileSelectionBox</literal> widget, which give it an  improved look and feel.</para></listitem><listitem lang="en"><para lang="en">Enabling interoperability with Microsoft Windows and OPEN LOOK through  multiple virtual key bindings.</para></listitem></itemizedlist><para lang="en">Each of the preceding enhancements can be controlled by a resource:  either a widget resource (for <literal moreinfo="none" lang="en">XmFileSelectionBox</literal>) or an  application-wide resource (all other cases). The default values for this  resource provide behavior and APIs that are identical to that of Motif 1.2.  For information on these enhancements and resources, see the  <literal moreinfo="none" lang="en">XmDisplay(3x)</literal> and <literal moreinfo="none" lang="en">XmFileSelectionBox(3x)</literal>  man pages.</para></sect1><sect1 id="motifapp-4" lang="en"><title lang="en">Motif Libraries</title><indexterm significance="normal" id="motifapp-ix451" lang="en"><primary lang="en">Common Desktop Environment Motif</primary><secondary lang="en">libraries</secondary></indexterm><para lang="en">Use the Common Desktop Environment Motif and X11R5  libraries to develop a Common Desktop Environment Motif-compliant application  for the X Window System. The Common Desktop Environment Motif libraries are  the Motif 2.1 libraries with bug fixes and enhancements. </para><sect2 id="motifapp-5" lang="en"><title lang="en">Motif Library (libXm)</title><para lang="en">The Common Desktop Environment provides all the Motif 2.1 header  files.</para></sect2><sect2 id="motifapp-6" lang="en"><title lang="en">Motif UIL library (libUil) </title><para lang="en">The Motif User Interface Language (UIL) is a specification language for  describing the initial state of a Motif application's user interface.  The Common Desktop Environment version is essentially unchanged from the Motif  version.</para><para lang="en">Include the <filename moreinfo="none" lang="en">UilDef.h</filename> header file (found in the  <filename moreinfo="none" lang="en">uil</filename> directory) to access UIL.</para></sect2><sect2 id="motifapp-7" lang="en"><title lang="en">Motif Resource Manager Library (libMrm)</title><para lang="en">The Motif resource manager (MRM) is responsible for creating widgets  based on definitions contained in User Interface Definition (UID) files  created by the UIL compiler. MRM interprets the output of the UIL compiler and  generates the appropriate argument lists for widget creation functions. Use  <literal moreinfo="none" lang="en">libMrm</literal> to access the Motif resource manager. The Common  Desktop Environment version is essentially unchanged from the Motif  version.</para><para lang="en">Include the <filename moreinfo="none" lang="en">Mrm/MrmPublic.h</filename> header files to access  <literal moreinfo="none" lang="en">libMrm</literal> in your application.  <indexterm significance="normal" id="motifapp-ix452" lang="en"><primary lang="en">Common Desktop Environment Motif</primary><secondary lang="en">libraries</secondary></indexterm></para></sect2></sect1><sect1 id="motifapp-41258" lang="en"><title lang="en">Demo Programs</title><para lang="en">You can find Motif 1.2 demos in  <filename moreinfo="none" lang="en">/usr/dt/examples/motif</filename>. These demos do not include any of  the Common Desktop Environment Motif enhancements or widgets.  <indexterm significance="normal" id="motifapp-ix453" lang="en"><primary lang="en">Motif</primary><secondary lang="en">demo programs</secondary></indexterm></para><bridgehead lang="en">Related Documentation</bridgehead><para lang="en">For more information on Motif, consult the Motif books listed in  <link linkend="preface-29208" lang="en">"Related Books"</link>. For more information on the enhancements to Motif 2.1, see the relevant  man pages. <indexterm significance="normal" id="motifapp-ix454" lang="en"><primary lang="en">Motif</primary><secondary lang="en">Common Desktop Environment</secondary></indexterm></para></sect1></appendix><appendix id="comprefapp-44042" lang="en"><gentext type="text">Appendix B</gentext><gentext type="toc">B.  Component and Guideline Reference</gentext><title lang="en">Component and Guideline Reference</title><highlights lang="en"><para lang="en">This appendix alphabetically lists all the CDE development environment  components and guidelines, along with any associated library and header files,  and provides references to associated documentation. In addition to the  documentation listed, all components provide man pages, which are located in  the <filename moreinfo="none" lang="en">/usr/dt/man</filename> directory. All header files are located  in the <literal moreinfo="none" lang="en">Dt</literal> subdirectory of  <filename moreinfo="none" lang="en">/usr/dt/include</filename> unless otherwise noted. </para></highlights><table frame="topbot" id="comprefapp-tbl-1" lang="en"><gentext type="text">Table B-1 </gentext><title lang="en">Components and Associated Documentation </title><tgroup cols="4" colsep="0" rowsep="0" lang="en"><colspec colnum="1" colname="column1" colwidth="3*"/><colspec colnum="2" colname="column2" colwidth="2*"/><colspec colnum="3" colname="column3" colwidth="4*"/><colspec colnum="4" colname="column4" colwidth="4*"/><thead lang="en"><row rowsep="1" lang="en"><entry colname="column1" align="left" valign="bottom" lang="en"><para lang="en">Component</para></entry><entry colname="column2" align="left" valign="bottom" lang="en"><para lang="en">Library</para></entry><entry colname="column3" align="left" valign="bottom" lang="en"><para lang="en">Header  Files</para></entry><entry colname="column4" align="left" valign="bottom" lang="en"><para lang="en">Documentation</para></entry></row></thead><tbody lang="en"><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Actions and  Action</para><para lang="en">Invocation</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtSvc</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Action.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>;  <olink targetpartnumber="805-3899"><citetitle lang="en">Solaris Common Desktop Environment: User's Guide</citetitle></olink>; </para><para lang="en">man pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Application  Builder</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"/></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"/></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3914"><citetitle lang="en">Common Desktop Environment: Application Builder User's Guide</citetitle></olink>;</para><para lang="en"><citetitle lang="en">Application Builder  Help</citetitle></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Calendar</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libcsa</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">csa/csa.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>; <citetitle lang="en">Calendar  Help</citetitle></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Control  Widgets</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtWidget</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">ComboBox.h,  SpinBox.h, MenuButton.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>;</para><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Data  Typing</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtSvc</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dts.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>; </para><para lang="en"><olink targetpartnumber="805-3899"><citetitle lang="en">Solaris Common Desktop Environment: User's Guide</citetitle></olink>;</para><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Drag and  Drop</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtSvc</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Dnd.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>;</para><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Desktop Korn  shell</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"/></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"/></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3917"><citetitle lang="en">Common Desktop Environment: Desktop KornShell User's Guide</citetitle></olink>;</para><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Help  System</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtHelp</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Help.h,  HelpDialog.h, HelpQuickD.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-4055"><citetitle lang="en">Common Desktop Environment: Help System Author's and Programmer's Guide</citetitle></olink>;</para><para lang="en">man pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Common Desktop </para><para lang="en">Environment Motif</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libMrm</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Mrm/MrmPublic.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en">OSF/Motif 1.2  Programmer's Guide;</para><para lang="en">OSF/Motif 1.2 Reference  Guide;</para><para lang="en">man pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"/></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libUil</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">uil/UilDef.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en">OSF/Motif 1.2  Programmer's Guide;</para><para lang="en">OSF/Motif 1.2 Reference  Guide;</para><para lang="en">man pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en"/></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libXm</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Xm/*.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en">OSF/Motif 1.2  Programmer's Guide;</para><para lang="en">OSF/Motif 1.2 Reference  Guide;</para><para lang="en">man
pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Session  Manager</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtSvc</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Session.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>;</para><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Terminal  Emulator</para><para lang="en">Widget</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtTerm</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Term.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Text Editor  Widget</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtWidget</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Editor.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink>;</para><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">ToolTalk  Messaging</para><para lang="en">Service</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libtt</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Tt/tt_c.h,  Tt/tttk.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3915"><citetitle lang="en">Common Desktop Environment: ToolTalk Messaging Overview</citetitle></olink></para><para lang="en">man  pages</para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Workspace  Manager</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><literal moreinfo="none" lang="en">libDtSvc</literal></para></entry><entry colname="column3" align="left" valign="top" lang="en"><para lang="en"><filename moreinfo="none" lang="en">Wsm.h</filename></para></entry><entry colname="column4" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink></para><para lang="en">man  pages</para></entry></row></tbody></tgroup></table><para lang="en"/><table frame="topbot" id="comprefapp-tbl-2" lang="en"><gentext type="text">Table B-2 </gentext><title lang="en">Guidelines and Associated Documentation</title><tgroup cols="2" colsep="0" rowsep="0" lang="en"><colspec colnum="1" colname="column1" colwidth="4*"/><colspec colnum="2" colname="column2" colwidth="5*"/><thead lang="en"><row rowsep="1" lang="en"><entry colname="column1" align="left" valign="bottom" lang="en"><para lang="en">Guideline</para></entry><entry colname="column2" align="left" valign="bottom" lang="en"><para lang="en">Documentation</para></entry></row></thead><tbody lang="en"><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Internationalization</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3916"><citetitle lang="en">Common Desktop Environment: Internationalization Programmer's Guide</citetitle></olink></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Standard Font  Names</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">Displaying Error  Messages</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3910"><citetitle lang="en">Solaris Common Desktop Environment: Programmer's Guide</citetitle></olink></para></entry></row><row lang="en"><entry colname="column1" align="left" valign="top" lang="en"><para lang="en">User Customization </para><para lang="en">(color use, accessibility, mouse </para><para lang="en">double-click  speed)</para></entry><entry colname="column2" align="left" valign="top" lang="en"><para lang="en"><olink targetpartnumber="805-3913"><citetitle lang="en">Common Desktop Environment:
Style Guide and Certification Checklist</citetitle></olink></para></entry></row></tbody></tgroup></table></appendix></book>