diff options
author | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2011-04-24 10:30:45 +0000 |
---|---|---|
committer | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2011-04-24 10:30:45 +0000 |
commit | bc3f869925ec95f2fa431f6cf9b687a5349e14bb (patch) | |
tree | c12133262a77d99d1e50dad03811d6a4c9d568b8 /doc/xorg-docs/specs/Xserver/appgroup.xml | |
parent | e92849244470e2aa75e76bbf7cb5066f986b229d (diff) |
Update to xorg-docs 1.6.
As with previous version, only manual pages in section 7 are
installed for now.
More work is needed to be able to format and install the docs
that have been converted to docbook xml.
Diffstat (limited to 'doc/xorg-docs/specs/Xserver/appgroup.xml')
-rw-r--r-- | doc/xorg-docs/specs/Xserver/appgroup.xml | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/doc/xorg-docs/specs/Xserver/appgroup.xml b/doc/xorg-docs/specs/Xserver/appgroup.xml new file mode 100644 index 000000000..ef3c06512 --- /dev/null +++ b/doc/xorg-docs/specs/Xserver/appgroup.xml @@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> + + +<article id="appgroup"> + +<articleinfo> + <title>Description of the Application Group Extension</title> + <subtitle>Implementation for the X11 Sample Server</subtitle> + <releaseinfo>Version 1.0</releaseinfo> + <authorgroup> + <author> + <firstname>Kaleb </firstname><surname>KEITHLEY</surname> + <affiliation><orgname>FUJITSU Limited.</orgname></affiliation> + </author> + </authorgroup> + <corpname>X Consortium Standard</corpname> + <copyright><year>1996</year><holder>X Consortium</holder></copyright> + <affiliation><orgname>X Consortium</orgname></affiliation> + <productnumber>X Version 11, Release 7</productnumber> + +<abstract> +<para> +The following document explains the server side of the Application +Group Extension. +</para> +</abstract> + +<legalnotice> + + +<para> +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +</para> + +<para> +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +</para> + +<para> +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +</para> + +<para> +The following document explains the server side of the Application +Group Extension. +</para> + +<para> +WindowsNT is a trademark of Microsoft, Inc. Macintosh and Apple +are trademarks of Apple Computer, Inc. X Window System is a +trademark of X Consortium, Inc. +</para> +</legalnotice> +</articleinfo> + +<para> +To understand this document and the accompanying source code, you +should know the C language, should be familiar with X server +internals, and should also have a general knowledge of the X +Window System. +</para> + +<sect1 id="AppGroup_Server_Public_Functions"> +<title>AppGroup Server Public Functions</title> +<para> +The AppGroup extension adds seven new functions that are called +from elsewhere in the server. They are: XagExtensionInit, +XagDefaultColormap, XagRootVisual, XagLeader, XagIsControlledRoot, +XagConnectionInfo, XagCallClientStateChange. +</para> +<para> +XagExtensionInit is the extension initialization function called +from InitExtension in mi/miinitext.c. Note that an new resource +type, RT_APPGROUP, is created, specifying the destructor function +XagAppGroupFree. +</para> +<para> +XagDefaultColormap returns the colormap ID that was specified in +the creation of the AppGroup. Any time CopyFromParent is specified +for a top-level window's colormap, i.e. in a CreateWindow or +ChangeWindowAttributes request, this function is called to see +if there is an AppGroup specific colormap to use. If there is +one, its ID is returned, otherwise None is returned. +</para> +<para> +XagRootVisual returns the visual ID that was specified in the +creation of the Appgroup. Like XagDefaultColormap, when CopyFromParent +is specified for a top-level window's visual in a CreateWindow +request, this function is called to see if there is an AppGroup +specific visual to use. If there is one, its ID is returned, +otherwise 0 (zero) is returned. +</para> +<para> +XagLeader returns the ClientPtr of the client that is the AppGroup +Leader. Normally when an application maps or configures a top-level +window a MapRequest or ConfigureRequest event is delivered to the +client, e.g. a window manager, that has selected SubstructureRedirect +on the root window. However, when the application is part of an +AppGroup, the MapRequest and ConfigureRequest events are delivered +to the AppGroup Leader instead. +</para> +<para> +XagIsControlledRoot returns a boolean: True if the window is a +top-level window of a client in an AppGroup, False otherwise. +In a combined server, i.e. one that provides both UI and printing, +the application may create and map windows on the "printing" +screens; thus it becomes necessary to discriminate between the +AppGroup's root window and other root windows. If an AppGroup +member creates and maps a [top-level] window then the window's +parent [the root window] is tested to determine whether to send +MapRequest or ConfigureRequest events to the AppGroup Leader to +to some other client. +</para> +<para> +In the trivial case XagIsControlledRoot returns True if the parent +window has no parent itself, i.e. it is a root window. In the case +where the application is embedded, indicated by the singleScreen +attribute being True, the parent's drawable ID is compared to the +AppGroup's root window ID, and if it is the same, True is returned. +If neither case is true, then False is returned. +</para> +<para> +XagConnectionInfo returns an abreviated version of the connection +setup information. When an embedded AppGroup is created the server +returns only the information about the [UI] screen that the +application is embedded within in the connection setup in order to +prevent the application from creating windows on other screens; +thus attempting to guarantee that any window that should be embedded +can be reparented into the AppGroup Leader's window hierarchy. +</para> +<para> +XagCallClientStateChange is called to invoke the extension's client +state change callback additional times as necessary -- currently +only once, after the auth data becomes available between +ClientStateInitial and ClientStateConnected. Client state change +callbacks were introduced in the Record extension, which specifies +when the callbacks are invoked. Unfortunately the points at which +they are called are not necessarily the best as far as the AppGroup +Extension is concerned. Adding an additional state and calling all +the callbacks works too, however this seemed unnecessary overkill. +</para> +</sect1> + +<sect1 id="AppGroup_Server_Private_APIs"> +<title>AppGroup Server Private APIs</title> +<para> +The AppGroup extension adds the following functions which are +private to the extension: ProcXagDispatch and SProcXagDispatch, +ProcXagQueryVersion and SProcXagQueryVersion, ProcXagCreate and +SProcXagCreate, ProcXagDestroy and SProcXagDestroy, +ProcGetAttr and SProcGetAttr, ProcXagQuery and SProcXagQuery, +ProcXagCreateAssoc and SProcXagCreateAssoc, ProcXagDestroyAssoc +and SProcXagDestroyAssoc, XagResetProc, and XagAppGroupFree. +</para> +<para> +The ProcXagDispatch, SProcXagDispatch, and XagResetProc functions +should be familiar to anyone familiar with X server internals and +I won't elaborate on them here. Similarly the wrapper functions: +SProcXagQueryVersion, SProcXagCreate, SProcXagDestroy, SProcXagGetAttr, +SProcXagQuery, SProcXagCreateAssoc, and SProcXagDestroyAssoc, as +wrappers which handle swapping integer data into the host's byte +order will not be explained in any detail. +</para> +<para> +ProcXagQueryVersion returns the major and minor versions of the +AppGroup extension supported by the server. +</para> +<para> +ProcXagCreate creates an AppGroup. A new record in a linked list +of AppGroups is allocated and initialized. The attributes from the +request are validated and copied to the AppGroup record. If necessary +an abbreviated version of the connection setup information is compiled +and also stored in the AppGroup record. The first time an AppGroup +is created a client-state-change callback is registered and a +reference count is incremented. +</para> +<para> +ProcXagDestroy destroys an AppGroup an AppGroup by calling +FreeResource specifying the AppGroup ID. This will result in +the destructor function XagAppGroupFree being called. The +reference count is decremented and when it reaches zero the +client-state-change callback is deleted. +</para> +<para> +ProcXagGetAttr returns the AppGroup Attributes to the requesting +client. +</para> +<para> +ProcXagQuery returns the AppGroup ID of an arbitrary resource to +the requesting client. +</para> +<para> +ProcXagCreateAssoc creates an association between an X window ID +and system-specific data. In native X this functionality is +unnecessary but for various personal computers, e.g. Macintosh, +OS/2, and MS-Windows it is necessary to associate an X window ID +with the system's native window identifier so that when the +AppGroup Leader issues a ReparentWindow request the personal +computer X server can lookup the system-specific window ID and +make the necessary function call(s) with it. +</para> +<para> +ProcXagDestroyAssoc destroys the association created with +ProcXagCreateAssoc. +</para> +<para> +XagResetProc removes the client-state-change callback, sets the +reference count to zero, and frees all the AppGroup records in +the linked list by calling XagAppGroupFree. +</para> +<para> +XagAppGroupFree calls CloseDownClient for each client in an +AppGroup if the AppGroup has a leader, unlinks the AppGroup +record from the linked list, frees allocated memory referenced +by the record, and finally frees the record itself. +</para> +</sect1> + +<sect1 id="Known_Problems_in_this_release_"> +<title>Known Problems in this release.</title> +<para> +In a combined UI/Print server the connection setup returned to an +embedded application will not have information about the print +screens. +</para> +<para> +The LBX proxy caches connection setup information and will return +incorrect connection setup information to an embedded client. +</para> +</sect1> +</article> |