This commit was manufactured by cvs2svn to create branch 'chise-r21-4-19'.
[chise/xemacs-chise.git-] / info / external-widget.info
diff --git a/info/external-widget.info b/info/external-widget.info
new file mode 100644 (file)
index 0000000..81d6daa
--- /dev/null
@@ -0,0 +1,247 @@
+This is ../info/external-widget.info, produced by makeinfo version 4.8
+from external-widget.texi.
+
+INFO-DIR-SECTION XEmacs Editor
+START-INFO-DIR-ENTRY
+* External Widget: (external-widget) External Client Widget.
+END-INFO-DIR-ENTRY
+
+\1f
+File: external-widget.info,  Node: Top,  Next: Using an External Client Widget,  Up: (dir)
+
+   An "external client widget" is a widget that is part of another
+program but functions as an Emacs frame.  This is intended to be a more
+powerful replacement for standard text widgets.
+
+* Menu:
+
+* Using an External Client Widget::
+* External Client Widget Resource Settings::
+* Motif-Specific Info About the External Client Widget::
+* External Client Widget Internals::
+
+\1f
+File: external-widget.info,  Node: Using an External Client Widget,  Next: External Client Widget Resource Settings,  Prev: Top,  Up: Top
+
+1 Using an External Client Widget
+*********************************
+
+There are three different implementations of the external client widget.
+One is designed for use in Motif applications and is linked with the
+option `-lextcli_Xm'.  Another is designed for non-Motif applications
+that still use the X toolkit; it is linked with the option
+`-lextcli_Xt'.  The third is designed for applications that do not use
+the X toolkit; it is linked with the option `-lextcli_Xlib'.  In order
+to use an external client widget in a client program that uses the X
+toolkit (i.e. either of the first two options described above), simply
+create an instance of widget type ExternalClient and link your program
+with the appropriate library.  The corresponding header file is called
+`ExternalClient.h'.
+
+   Documentation still needs to be provided for using the raw Xlib
+version of the external client widget.
+
+   The external client widget will not do anything until an instance of
+Emacs is told about this particular widget.  To do that, call the
+function `make-frame', specifying a value for the frame parameter
+`window-id'.  This value should be a string containing the decimal
+representation of the widget's X window ID number (this can be obtained
+by the Xt function `XtWindow()').  In order for the client program to
+communicate this information to Emacs, a method such as sending a
+ToolTalk message needs to be used.
+
+   Once `make-frame' has been called, Emacs will create a frame that
+occupies the client widget's window.  This frame can be used just like
+any other frame in Emacs.
+
+\1f
+File: external-widget.info,  Node: External Client Widget Resource Settings,  Next: Motif-Specific Info About the External Client Widget,  Prev: Using an External Client Widget,  Up: Top
+
+2 External Client Widget Resource Settings
+******************************************
+
+The external client widget is a subclass of the Motif widget XmPrimitive
+and thus inherits all its resources.  In addition, the following new
+resources are defined:
+
+`deadShell (class DeadShell)'
+     A boolean resource indicating whether the last request to the
+     ExternalShell widget that contains the frame corresponding to this
+     widget timed out.  If true, no further requests will be made (all
+     requests will automatically fail) until a response to the last
+     request is received.  This resource should normally not be set by
+     the user.
+
+`shellTimeout (class ShellTimeout)'
+     A value specifying how long (in milliseconds) the client should
+     wait for a response when making a request to the corresponding
+     ExternalShell widget.  If this timeout is exceeded, the client
+     will assume that the shell is dead and will fail the request and
+     all subsequent requests until a response to the request is
+     received.  Default value is 5000, or 5 seconds.
+
+   The shell that contains the frame corresponding to an external client
+widget is of type ExternalShell, as opposed to standard frames, whose
+shell is of type TopLevelShell.  The ExternalShell widget is a direct
+subclass of Shell and thus inherits its resources.  In addition, the
+following new resources are defined:
+
+`window (class Window)'
+     The X window ID of the widget to use for this Emacs frame.  This is
+     normally set by the call to `x-create-frame' and should not be
+     modified by the user.
+
+`deadClient (class DeadClient)'
+     A boolean resource indicating whether the last request to the
+     corresponding ExternalClient widget timed out.  If true, no further
+     requests will be made (all requests will automatically fail) until
+     a response to the last request is received.  This resource should
+     normally not be set by the user.
+
+`ClientTimeout (class ClientTimeout)'
+     A value specifying how long (in milliseconds) the shell should wait
+     for a response when making a request to the corresponding
+     ExternalClient widget.  If this timeout is exceeded, the shell
+     will assume that the client is dead and will fail the request and
+     all subsequent requests until a response to the request is
+     received.  Default value is 5000, or 5 seconds.
+
+   Note that the requests that are made between the client and the shell
+are primarily for handling query-geometry and geometry-manager requests
+made by parent or child widgets.
+
+\1f
+File: external-widget.info,  Node: Motif-Specific Info About the External Client Widget,  Next: External Client Widget Internals,  Prev: External Client Widget Resource Settings,  Up: Top
+
+3 Motif-Specific Info About the External Client Widget
+******************************************************
+
+By default, the external client widget has navigation type
+`XmTAB_GROUP'.
+
+   The widget traversal keystrokes are modified slightly from the
+standard XmPrimitive keystrokes.  In particular, `<TAB>' alone does not
+traverse to the next widget (`Ctrl-<TAB>' must be used instead), but
+functions like a normal <TAB> in Emacs.  This follows the semantics of
+the Motif text widget.  The traversal keystrokes `Ctrl-<TAB>' and
+`Shift-<TAB>' are silently filtered by the external client widget and
+are not seen by Emacs.
+
+\1f
+File: external-widget.info,  Node: External Client Widget Internals,  Prev: Motif-Specific Info About the External Client Widget,  Up: Top
+
+4 External Client Widget Internals
+**********************************
+
+The following text is lifted verbatim from Ben Wing's comments in
+`ExternalShell.c'.
+
+   This is a special Shell that is designed to use an externally-
+provided window created by someone else (possibly another process).
+That other window should have an associated widget of class
+ExternalClient.  The two widgets communicate with each other using
+ClientMessage events and properties on the external window.
+
+   Ideally this feature should be independent of Emacs.  Unfortunately
+there are lots and lots of specifics that need to be dealt with for
+this to work properly, and some of them can't conveniently be handled
+within the widget's methods.  Some day the code may be rewritten so
+that the embedded-widget feature can be used by any application, with
+appropriate entry points that are called at specific points within the
+application.
+
+   This feature is similar to the OLE (Object Linking & Embedding)
+feature provided by MS Windows.
+
+   Communication between this shell and the client widget:
+
+   Communication is through ClientMessage events with message_type
+EXTW_NOTIFY and format 32.  Both the shell and the client widget
+communicate with each other by sending the message to the same window
+(the "external window" below), and the data.l[0] value is used to
+determine who sent the message.
+
+   The data is formatted as follows:
+
+   data.l[0] = who sent this message: external_shell_send (0) or
+    external_client_send (1) data.l[1] = message type (see enum
+en_extw_notify below) data.l[2-4] = data associated with this message
+
+   EventHandler() handles messages from the other side.
+
+   extw_send_notify_3() sends a message to the other side.
+
+   extw_send_geometry_value() is used when an XtWidgetGeometry structure
+  needs to be sent.  This is too much data to fit into a
+ClientMessage, so the data is stored in a property and then
+extw_send_notify_3() is called.
+
+   extw_get_geometry_value() receives an XtWidgetGeometry structure
+from a    property.
+
+   extw_wait_for_response() is used when a response to a sent message
+is expected.  It looks for a matching event within a    particular
+timeout.
+
+   The particular message types are as follows:
+
+   1) extw_notify_init (event_window, event_mask)
+
+   This is sent from the shell to the client after the shell realizes
+its EmacsFrame widget on the client's "external window".  This tells
+the client that it should start passing along events of the types
+specified in event_mask.  event_window specifies the window of the
+EmacsFrame widget, which is a child of the client's external window.
+
+   extw_notify_init (client_type)
+
+   When the client receives an extw_notify_init message from the shell,
+it sends back a message of the same sort specifying the type of the
+toolkit used by the client (Motif, generic Xt, or Xlib).
+
+   2) extw_notify_end ()
+
+   This is sent from the shell to the client when the shell's
+EmacsFrame widget is destroyed, and tells the client to stop passing
+events along.
+
+   3) extw_notify_qg (result)
+
+   This is sent from the client to the shell when a QueryGeometry
+request is received on the client.  The XtWidgetGeometry structure
+specified in the QueryGeometry request is passed on in the
+EXTW_QUERY_GEOMETRY property (of type EXTW_WIDGET_GEOMETRY) on the
+external window.  result is unused.
+
+   In response, the shell passes the QueryGeometry request down the
+widget tree, and when a response is received, sends a message of type
+extw_notify_qg back to the client, with result specifying the
+GeometryResult value.  If this value is XtGeometryAlmost, the returned
+XtWidgetGeometry structure is stored into the same property as above.
+[BPW is there a possible race condition here?]
+
+   4) extw_notify_gm (result)
+
+   A very similar procedure to that for extw_notify_qg is followed when
+the shell's RootGeometryManager method is called, indicating that a
+child widget wishes to change the shell's geometry.  The
+XtWidgetGeometry structure is stored in the EXTW_GEOMETRY_MANAGER
+property.
+
+   5) extw_notify_focus_in (), extw_notify_focus_out ()
+
+   These are sent from the client to the shell when the client gains or
+loses the keyboard focus.  It is done this way because Xt maintains its
+own concept of keyboard focus and only the client knows this
+information.
+
+
+\1f
+Tag Table:
+Node: Top\7f232
+Node: Using an External Client Widget\7f699
+Node: External Client Widget Resource Settings\7f2414
+Node: Motif-Specific Info About the External Client Widget\7f5158
+Node: External Client Widget Internals\7f5973
+\1f
+End Tag Table