svn: r7263

original commit: e4cbc4e6a938fd5bd90aab305ca39d61e7eae151
This commit is contained in:
Matthew Flatt 2007-09-02 17:39:32 +00:00
parent 371a8ea509
commit 1326804b18
17 changed files with 130 additions and 110 deletions

View File

@ -1,9 +1,10 @@
#reader(lib "reader.ss" "scribble")
(module blurbs mzscheme
(module blurbs (lib "lang.ss" "big")
(require (lib "struct.ss" "scribble")
(lib "manual.ss" "scribble")
(lib "scheme.ss" "scribble")
(lib "decode.ss" "scribble"))
(require-for-label (lib "mred.ss" "mred"))
(provide (all-defined-except p))
@ -96,7 +97,7 @@ start/end @techlink{position} is incremented by @|what|.})
(define OVD
@elem{The result is only valid when the editor is displayed (see
@secref["mr:tb:miaoverview"]).})
@secref["tb:miaoverview"]).})
(define (FCAX c details)
@elem{@|c|alling this method may force the recalculation of @techlink{location}
@ -119,28 +120,28 @@ information@|details|, even if the editor currently has delayed refreshing (see
instead of lines (determined by both explicit newline
characters and automatic line-wrapping).})
(define admindiscuss @secref["mr:editoradministrators"])
(define ateoldiscuss @secref["mr:editoreol"])
(define textdiscuss @secref["mr:editorflattened"])
(define clickbackdiscuss @secref["mr:editorclickback"])
(define stylediscuss @secref["mr:editorstyles"])
(define timediscuss @secref["mr:editorcutandpastetime"])
(define filediscuss @secref["mr:editorfileformat"])
(define editordatadiscuss @secref["mr:editordata"])
(define snipclassdiscuss @secref["mr:editorsnipclasses"])
(define togglediscuss @secref["mr:styledeltatoggle"])
(define drawcaretdiscuss @secref["mr:drawcaretinfo"])
(define eventspacediscuss @secref["mr:eventspaceinfo"])
(define lockdiscuss @secref["mr:lockinfo"])
(define mousekeydiscuss @secref["mr:mouseandkey"])
(define globaleditordatadiscuss @secref["mr:globaleditordata"])
(define admindiscuss @secref["editoradministrators"])
(define ateoldiscuss @secref["editoreol"])
(define textdiscuss @secref["editorflattened"])
(define clickbackdiscuss @secref["editorclickback"])
(define stylediscuss @secref["editorstyles"])
(define timediscuss @secref["editorcutandpastetime"])
(define filediscuss @secref["editorfileformat"])
(define editordatadiscuss @secref["editordata"])
(define snipclassdiscuss @secref["editorsnipclasses"])
(define togglediscuss @secref["styledeltatoggle"])
(define drawcaretdiscuss @secref["drawcaretinfo"])
(define eventspacediscuss @secref["eventspaceinfo"])
(define lockdiscuss @secref["lockinfo"])
(define mousekeydiscuss @secref["mouseandkey"])
(define globaleditordatadiscuss @secref["globaleditordata"])
(define geomdiscuss @secref["mr:containeroverview"])
(define geomdiscuss @secref["containeroverview"])
(define mrprefsdiscuss @secref["mr:mredprefs"])
(define mrprefsdiscuss @secref["mredprefs"])
(define seesniporderdiscuss
@elem{See @secref["mr:tb:miaoverview"] for information about snip order in pasteboards.})
@elem{See @secref["tb:miaoverview"] for information about snip order in pasteboards.})
(define (clipboardtypes)
@elem{The @scheme[format] string is typically four capital letters. (Under
@ -159,7 +160,9 @@ information@|details|, even if the editor currently has delayed refreshing (see
@item{@method[dc<%> end-doc]}}
@p{Attempts to use a drawing method outside of an active page raises an exception.})))
(define SeeMzParam @elem{(see @secref["mz:parameters"])})
(define reference-doc '(lib "reference.scrbl" "scribblings" "reference"))
(define SeeMzParam @elem{(see @secref[#:doc reference-doc "parameters"])})
(define DrawSizeNote @elem{Restrictions on the magnitude of
drawing coordinates are described with @scheme[dc<%>].})

View File

@ -11,6 +11,12 @@
(all-from (lib "class.ss"))
(all-from (lib "contract.ss"))
(all-from "blurbs.ss")
(all-from "../reference/mz.ss")))
(all-from "../reference/mz.ss"))
(require-for-label (lib "mred.ss" "mred")
(lib "class.ss")
(lib "lang.ss" "big"))
(provide-for-label (all-from (lib "mred.ss" "mred"))
(all-from (lib "class.ss"))
(all-from (lib "lang.ss" "big"))))

View File

@ -3,6 +3,7 @@
(lib "struct.ss" "scribble")
(lib "scheme.ss" "scribble")
(lib "manual.ss" "scribble"))
(require-for-label (lib "mred.ss" "mred"))
(provide diagram->table
short-windowing-diagram
@ -31,7 +32,8 @@
[(regexp-match #rx"([^-a-zA-Z0-9]*)([-a-zA-Z0-9<%>]+)(.*)" line)
=> (lambda (m)
(append (loop (cadr m))
(list (to-element (string->symbol (caddr m))))
(list (to-element (make-just-context (string->symbol (caddr m))
#'here)))
(loop (cadddr m))))]
[else (list (make-element 'tt (list line)))])))))))
(regexp-split #rx"[\r\n]+" d))))

View File

@ -350,9 +350,9 @@ If @scheme[raise-errors?] is true, then an error in reading triggers an
This procedure is a load handler for use with @scheme[current-load].
The handler recognizes MrEd editor-format files (see
@secref["mr:editorfileformat"]) and decodes them for loading. It is
@secref["editorfileformat"]) and decodes them for loading. It is
normally installed as MrEd starts (see
@secref["mr:startupsequence"]).
@secref[#:doc reference-doc "running-sa"]).
The handler recognizes editor files by the first twelve characters of
the file: @litchar{WXME01}@nonterm{digit}@nonterm{digit}@litchar{ ## }.
@ -412,7 +412,7 @@ One or more editors can be written to the stream by calling the
To support streams that span MrEd versions, use
@scheme[write-editor-version] before this procedure.
See also @secref["mr:editorfileformat"].
See also @secref["editorfileformat"].
}

View File

@ -205,7 +205,7 @@ When an editor contains other editors, using @method[editor<%>
end-edit-sequence] for the sub-editor.
See also @method[editor<%> refresh-delayed?] and @method[editor<%>
in-edit-sequence?], and see @secref["mr:editorthreads"] for
in-edit-sequence?], and see @secref["editorthreads"] for
information about edit sequences and refresh requests.
If the @scheme[undoable?] flag is @scheme[#f], then the changes made
@ -1322,7 +1322,7 @@ If automatic wrapping is enabled (see @method[editor<%> auto-wrap] )
Calls @method[editor<%> on-display-size] unless the editor is
currently in an edit sequence or currently being refreshed. In the
latter cases, the call to @method[editor<%> on-display-size] is
delegated to another thread; see @secref["mr:editorthreads"] for more
delegated to another thread; see @secref["editorthreads"] for more
information.
}
@ -1853,7 +1853,7 @@ See also @method[editor<%> add-undo].
void?]{
Repaints a region of the editor, generally called by an editor
administrator. See @secref["mr:editorthreads"] for information about
administrator. See @secref["editorthreads"] for information about
edit sequences and refresh requests.
The @scheme[x], @scheme[y], @scheme[width], and @scheme[height] arguments specify

View File

@ -2,7 +2,7 @@
@require[(lib "bnf.ss" "scribble")]
@require["common.ss"]
@title[#:tag "mr:editor-overview"]{Editor}
@title[#:tag "editor-overview"]{Editor}
The editor toolbox provides a foundation for two common kinds of
applications:
@ -154,7 +154,7 @@ Applications that use the editor classes typically derive new versions
(super-new)))
]
@section[#:tag "mr:tb:miaoverview"]{Editor Structure and Terminology}
@section[#:tag "tb:miaoverview"]{Editor Structure and Terminology}
MrEd supports extensible and nestable editors by decomposing an editor
assembly into three functional parts:
@ -221,7 +221,7 @@ When an editor is drawn into a display, each snip and position has a
displayed.
@subsection[#:tag "mr:editoradministrators"]{Administrators}
@subsection[#:tag "editoradministrators"]{Administrators}
Two extra layers of administration manage the @techlink{display}-editor and
editor-snip connections. An editor never communicates directly with
@ -259,7 +259,7 @@ When an editor is displayed by multiple canvases, one of the canvases'
editor's @method[editor<%> get-admin] method thus depends on the
context of the call.
@subsection[#:tag "mr:editorstyles"]{Styles}
@subsection[#:tag "editorstyles"]{Styles}
A @deftech{style}, an instance of the @scheme[style<%>] interface,
parameterizes high-level display information that is common to all
@ -336,7 +336,7 @@ See @xmethod[text% get-styles-sticky] for more information about the
style of inserted text.
@section[#:tag "mr:editorfileformat"]{File Format}
@section[#:tag "editorfileformat"]{File Format}
To allow editor content to be saved to a file, the editor classes
implement a special file format. (The format is used when cutting and
@ -412,7 +412,7 @@ Snip classes, snip data, and snip data classes solve problems related
for saving files or cut-and-paste, these issues can be safely
ignored.
@subsubsection[#:tag "mr:editorsnipclasses"]{Snip Classes}
@subsubsection[#:tag "editorsnipclasses"]{Snip Classes}
Each snip can be associated to a @deftech{snip class}. This ``class''
is not a class description in the programmer's language; it is an
@ -435,7 +435,7 @@ If a snip class's name is of the form @scheme["(lib ...)"], then the
it is inserted into the current eventspace's snip class list, and
loading or saving continues using the new class.
@subsubsection[#:tag "mr:editordata"]{Editor Data}
@subsubsection[#:tag "editordata"]{Editor Data}
While a snip belongs to an editor, the editor may store extra
information about a snip in some specialized way. When the snip is to
@ -475,7 +475,7 @@ To store and load information about a snip or region in an editor:
}
@subsection[#:tag "mr:globaleditordata"]{Global Data: Headers and Footers}
@subsection[#:tag "globaleditordata"]{Global Data: Headers and Footers}
The editor file format provides for adding extra global data in
special header and footer sections. To save and load special header
@ -517,7 +517,7 @@ See also @method[editor<%> write-headers-to-file] and
@method[editor<%> write-headers-to-file].
@section[#:tag "mr:editoreol"]{End of Line Ambiguity}
@section[#:tag "editoreol"]{End of Line Ambiguity}
Because an editor can force a line break even when there is no
carriage return item, a @techlink{position} alone does not always
@ -539,7 +539,7 @@ For this reason, @techlink{position}-setting and
is filled with @scheme[#t] if the position is ambiguous and it came
from a right-side location, or @scheme[#f] otherwise.
@section[#:tag "mr:editorflattened"]{Flattened Text}
@section[#:tag "editorflattened"]{Flattened Text}
In plain text editors, there is a simple correlation between
@techlink{position}s and characters. In an @scheme[editor<%>] object,
@ -568,7 +568,7 @@ Text can be extracted from an editor in either of two forms:
}
@section[#:tag "mr:drawcaretinfo"]{Caret Ownership}
@section[#:tag "drawcaretinfo"]{Caret Ownership}
Within a frame, only one object can contain the keyboard focus. This
property must be maintained when a frame contains multiple editors in
@ -609,7 +609,7 @@ The @scheme['show-inactive-caret] display mode is useful for showing
its selection.
@section[#:tag "mr:editorcutandpastetime"]{Cut and Paste Time Stamps}
@section[#:tag "editorcutandpastetime"]{Cut and Paste Time Stamps}
Methods of @scheme[editor<%>] that use the clipboard --- including
@method[editor<%> copy], @method[editor<%> cut], @method[editor<%>
@ -627,7 +627,7 @@ If the time stamp is 0, it defaults to the current time. Using 0 as the
under X.
@section[#:tag "mr:editorclickback"]{Clickbacks}
@section[#:tag "editorclickback"]{Clickbacks}
@deftech{Clickbacks} in a @scheme[text%] editor facilitate the
creation of simple interactive objects, such as hypertext. A
@ -647,7 +647,7 @@ Note that there is no attempt to save clickback information when a
file is saved, since a clickback will have an arbitrary procedure
associated with it.
@section[#:tag "mr:lockinfo"]{Internal Editor Locks}
@section[#:tag "lockinfo"]{Internal Editor Locks}
Instances of @scheme[editor<%>] have three levels of internal
locking:
@ -693,7 +693,7 @@ Methods that report @techlink{location}-independent information about an
that modifies the editor in any way, even setting the selection
position, can trigger a read lock, flow lock, or write lock.
@section[#:tag "mr:editorthreads"]{Editors and Threads}
@section[#:tag "editorthreads"]{Editors and Threads}
An editor is not tied to any particular thread or eventspace, except
to the degree that it is displayed in a canvas (which has an

View File

@ -1,7 +1,7 @@
#reader(lib "docreader.ss" "scribble")
@require["common.ss"]
@title[#:tag "mr:eventspace-funcs"]{Eventspaces}
@title[#:tag "eventspace-funcs"]{Eventspaces}
@defproc[(make-eventspace)
eventspace]{
@ -139,7 +139,7 @@ A second (optional) boolean argument indicates whether the callback
any/c])]{
\index{pause}\index{wait}
Yields control to event dispatching. See
@secref["mr:eventspaceinfo"] for details.
@secref["eventspaceinfo"] for details.
A handler procedure invoked by the system during a call to
@scheme[yield] can itself call @scheme[yield], creating
@ -180,18 +180,18 @@ Evaluating @scheme[(yield 'wait)] is thus similar to
sensitive to whether the current thread is a handler thread, instead
of the value of the @scheme[current-eventspace] parameter.
If @scheme[v] is an event in MzScheme's sense (not to be confused with a
GUI event), @scheme[yield] blocks on @scheme[v] in the same way as
MzScheme's \Mzhyperref{@scheme[sync]}{mz:sync}, except that it may
start a @scheme[sync] on @scheme[v] multiple times (but it will complete
a @scheme[sync] on @scheme[v] at most one time). If the current thread
is the current eventspace's handler thread, events are dispatched
until a @scheme[v] sync succeeds on a MrEd event boundary. For other
threads, calling @scheme[yield] with a MzScheme event is
equivalent to calling @scheme[sync]. In either case, the result is
the same that of @scheme[sync]; however, if a wrapper procedure is
associated with @scheme[v] via @scheme[handle-evt], it is not called in
tail position with respect to the @scheme[yield].
If @scheme[v] is an event in MzScheme's sense (not to be confused with
a GUI event), @scheme[yield] blocks on @scheme[v] in the same way as
@scheme[sync], except that it may start a @scheme[sync] on @scheme[v]
multiple times (but it will complete a @scheme[sync] on @scheme[v] at
most one time). If the current thread is the current eventspace's
handler thread, events are dispatched until a @scheme[v] sync
succeeds on a MrEd event boundary. For other threads, calling
@scheme[yield] with a MzScheme event is equivalent to calling
@scheme[sync]. In either case, the result is the same that of
@scheme[sync]; however, if a wrapper procedure is associated with
@scheme[v] via @scheme[handle-evt], it is not called in tail position
with respect to the @scheme[yield].
Always use @scheme[(yield @scheme[v])] instead of a busy-wait loop.
}

View File

@ -19,7 +19,7 @@ Returns a list of font face names available on the current system. If
Returns the built-in default face mapping for a particular font
family. The built-in default can be overridden via preferences, as
described in @secref["mr:fontresources"].
described in @secref["fontresources"].
See @scheme[font%] for information about @scheme[family].

View File

@ -1,12 +1,15 @@
#reader(lib "docreader.ss" "scribble")
@require["common.ss"]
@title{PLT Scheme GUI: MrEd}
@title[#:tag-prefix '(lib "gui.scrbl" "scribblings" "gui")
#:tag "top"]{PLT Scheme GUI: MrEd}
@declare-exporting[(lib "mred")]
This reference manual describes the MrEd GUI toolbox that is part of
PLT Scheme. See @secref["guide:mred"] in
@italic{@link["../guide/index.html"]{A Guide to PLT Scheme}} for an
introduction to MrEd.
PLT Scheme. See @secref[#:doc '(lib "guide.scrbl" "scribblings"
"guide") "mred"] in @italic{@link["../guide/index.html"]{A Guide to
PLT Scheme}} for an introduction to MrEd.
The @scheme[(lib "mred")] module provides all of the class, interface,
and procedure bindings defined in this manual. The

View File

@ -11,18 +11,18 @@ For documentation purposes, the MrEd toolbox is organized into three
@item{The @deftech{windowing} toolbox, for implementing form-filling
GUI programs (such as a database query window) using buttons, menus,
text fields, and events. The windowing toolbox is described in
@secref["mr:windowing-overview"].}
@secref["windowing-overview"].}
@item{The @deftech{drawing} toolbox, for drawing pictures or
implementing dynamic GUI programs (such as a video game) using
drawing canvases, pens, and brushes. The drawing toolbox is
described in @secref["mr:drawing-overview"].}
described in @secref["drawing-overview"].}
@item{The @deftech{editor} toolbox, for developing traditional text
editors, editors that mix text and graphics, or free-form layout
editors (such as a word processor, HTML editor, or icon-based file
browser). The editor toolbox is described in
@secref["mr:editor-overview"].}
@secref["editor-overview"].}
}

View File

@ -0,0 +1,4 @@
(module info (lib "infotab.ss" "setup")
(define name "Scribblings: GUI")
(define scribblings '(("gui.scrbl" (multi-page main-doc)))))

View File

@ -83,7 +83,7 @@ If @scheme[try-chain?] is not @scheme[#f], keymaps chained to this one
are searched for the function name. If the function is not found and
@scheme[try-chain?] is @scheme[#f]; an exception is also raised, but
the exception handler cannot escape (see
@secref["mr:evtcontjump"]).
@secref["evtcontjump"]).
}
@ -327,7 +327,7 @@ Examples:
A call to @method[keymap% map-function] that would map a particular
key sequence both as a prefix and as a complete sequence raises an
exception, but the exception handler cannot escape (see
@secref["mr:evtcontjump"]).
@secref["evtcontjump"]).
A function name does not have to be mapped to a handler before input
states are mapped to the name; the handler is dispatched by name at

View File

@ -1,7 +1,7 @@
#reader(lib "docreader.ss" "scribble")
@require["common.ss"]
@title[#:tag "mr:mredprefs"]{Preferences}
@title[#:tag "mredprefs"]{Preferences}
MrEd supports a number of preferences for global configuration. The
MrEd preferences are stored in the common file reported by
@ -22,7 +22,7 @@ The following are the (case-sensitive) preference names used by MrEd:
@item{@ResourceFirst{controlFontSize} --- sets the font size for
control and menu labels (Windows, X); the font is the @scheme['system]
font, which can be configured as described in
@secref["mr:fontresources"].}
@secref["fontresources"].}
@item{@ResourceFirst{defaultMenuPrefix} --- sets the prefix used by
default for menu item shortcuts under X, one of @scheme['ctl],
@ -82,4 +82,4 @@ The following are the (case-sensitive) preference names used by MrEd:
In addition, preference names built from font face names can provide
or override default entries for the @scheme[font-name-directory<%>];
see @secref["mr:fontresources"] for information.
see @secref["fontresources"] for information.

View File

@ -16,7 +16,8 @@ A @scheme[readable-snip<%>] object is treated specially by the port
any/c]{
The arguments are the same as the arguments to a procedure returned by
a custom input port's @scheme[read]; see @secref["mz:customport"] for
a custom input port's @scheme[read]; see @secref[#:doc '(lib
"reference.scrbl" "scribblings" "reference") "customport"] for
details. The result is also the same as the result from a
@scheme[read]-produced procedure.

View File

@ -1228,7 +1228,7 @@ If the line starts with invisible @techlink{item}s and @scheme[visible?] is not
To calculate lines, if the following are true:
@itemize{
@item{the editor is not displayed (see @secref["mr:tb:miaoverview"]),}
@item{the editor is not displayed (see @secref["tb:miaoverview"]),}
@item{a maximum width is set for the editor, and}

View File

@ -18,7 +18,7 @@ Timers have a relatively high priority in the event queue. Thus, if
within the @method[timer% notify] procedure to allow guaranteed event
processing.
See @secref["mr:eventspaceinfo"] for more information about event
See @secref["eventspaceinfo"] for more information about event
priorities.

View File

@ -3,7 +3,7 @@
@require["common.ss"]
@require["diagrams.ss"]
@title[#:tag "mr:windowing-overview"]{Windowing}
@title[#:tag "windowing-overview"]{Windowing}
@section{Basic GUI Building Blocks}
@ -18,7 +18,7 @@ MrEd's windowing toolbox provides the basic building blocks of GUI
(define frame (new frame% [label "Example"]))
(code:comment #, @t{Show the frame by calling its @method[top-level-window<%> show] method})
(send frame top-level-window::show #t)
(send frame #,(:: top-level-window<%> show) #t)
]
The built-in classes provide various mechanisms for handling GUI
@ -103,7 +103,7 @@ The system dispatches GUI events sequentially; that is, after invoking
After the user clicks @onscreen{Pause}, the entire frame becomes
unresponsive for five seconds; the system cannot dispatch more events
until the call to @scheme[sleep] returns. For more information about
event dispatching, see @secref["mr:eventspaceinfo"].
event dispatching, see @secref["eventspaceinfo"].
In addition to dispatching events, the GUI classes also handle the
graphical layout of windows. Our example frame demonstrates a simple
@ -128,7 +128,7 @@ In addition to dispatching events, the GUI classes also handle the
]
For more information about window layout and containers, see
@secref["mr:containeroverview"].
@secref["containeroverview"].
@section{Core Windowing Classes}
@ -180,7 +180,7 @@ The fundamental graphical element in MrEd's windowing toolbox is an
@item{@scheme[editor-canvas%] --- an @deftech{editor canvas} is a
subwindow for displaying a text editor or pasteboard editor. The
@scheme[editor-canvas%] class is documented with the editor classes
in @secref["mr:editor-overview"].}
in @secref["editor-overview"].}
@item{@deftech{Controls} --- containees that the user can manipulate:
@ -318,7 +318,7 @@ system:
@; ------------------------------------------------------------------------
@section[#:tag "mr:containeroverview"]{Geometry Management}
@section[#:tag "containeroverview"]{Geometry Management}
MrEd's geometry management makes it easy to design windows that look
right on all platforms, despite different graphical representations
@ -385,15 +385,15 @@ As the example demonstrates, a stretchable container grows to fill its
The following subsections describe the container system in detail,
first discussing the attributes of a containee in
@secref["mr:containees"], and then describing
@secref["containees"], and then describing
the attributes of a container in
@secref["mr:containers"]. In addition to the
@secref["containers"]. In addition to the
built-in vertical and horizontal containers, programmers can define
new types of containers as discussed in the final subsection,
@secref["mr:new-containers"].
@secref["new-containers"].
@subsection[#:tag "mr:containees"]{Containees}
@subsection[#:tag "containees"]{Containees}
Each @tech{containee}, or child, has the following properties:
@ -414,7 +414,7 @@ A @tech{container} arranges its children based on these four
container is specified when the @tech{containee} is created, and the
parent cannot be changed. However, a @tech{containee} can be
@tech{hidden} or @tech{deleted} within its parent, as described in
@secref["mr:containers"].
@secref["containers"].
The @deftech{graphical minimum size} of a particular containee, as
reported by @method[area<%> get-graphical-min-size], depends on the
@ -462,7 +462,7 @@ In practice, the @tech{requested minimum size} and @tech{margin} of a
containee, depending on the visual effect desired by the programmer.
@subsection[#:tag "mr:containers"]{Containers}
@subsection[#:tag "containers"]{Containers}
A container has the following properties:
@ -573,7 +573,7 @@ The alignment specification for a container determines how it
the container. A container's alignment is changed with the
@method[area-container<%> set-alignment] method.
@subsection[#:tag "mr:new-containers"]{Defining New Types of Containers}
@subsection[#:tag "new-containers"]{Defining New Types of Containers}
Although nested horizontal and vertical containers can express most
layout patterns, a programmer can define a new type of container with
@ -613,7 +613,7 @@ The widths and heights for both the input and output include the
placing the control.
@section[#:tag "mr:mouseandkey"]{Mouse and Keyboard Events}
@section[#:tag "mouseandkey"]{Mouse and Keyboard Events}
Whenever the user moves the mouse, clicks or releases a mouse button,
or presses a key on the keyboard, an event is generated for some
@ -698,7 +698,7 @@ Controls, such as buttons and list boxes, handle keyboard and mouse
@; ------------------------------------------------------------------------
@section[#:tag "mr:eventspaceinfo"]{Event Dispatching and Eventspaces}
@section[#:tag "eventspaceinfo"]{Event Dispatching and Eventspaces}
@section-index["events" "dispatching"]
@ -754,12 +754,12 @@ In MrEd, an @deftech{eventspace} is a context for processing GUI
@index['("dialogs" "modal")]{When} a frame or dialog is created
without a parent, it is associated with the @tech{current eventspace}
as described in @secref["mr:currenteventspace"]. Events for a
as described in @secref["currenteventspace"]. Events for a
top-level window and its descendants are always dispatched in the
window's eventspace. Every dialog is modal; a dialog's
@method[dialog% show] method implicitly calls @scheme[yield] to
handle events while the dialog is shown. (See also
@secref["mr:espacethreads"] for information about threads and modal
@secref["espacethreads"] for information about threads and modal
dialogs.) Furthermore, when a modal dialog is shown, the system
disables all other top-level windows in the dialog's eventspace, but
windows in other eventspaces are unaffected by the modal dialog.
@ -783,7 +783,7 @@ In addition to events corresponding to user and windowing actions,
call the timer's @method[timer% notify] method. Like a top-level
window, each timer is associated with a particular eventspace (the
@tech{current eventspace} as described in
@secref["mr:currenteventspace"]) when it is created, and the timer
@secref["currenteventspace"]) when it is created, and the timer
queues the event in its eventspace.
@deftech{Explicitly queued events} are created with
@ -817,10 +817,10 @@ Although a programmer has no direct control over the order in which
dispatches by setting the event dispatch handler via the
@scheme[event-dispatch-handler] parameter. This parameter and other
eventspace procedures are described in more detail in
@secref["mr:eventspace-funcs"].
@secref["eventspace-funcs"].
@subsection[#:tag "mr:espacethreads"]{Eventspaces and Threads}
@subsection[#:tag "espacethreads"]{Eventspaces and Threads}
When a new eventspace is created, a corresponding @deftech{handler
thread} is created for the eventspace. When the system dispatches an
@ -840,7 +840,7 @@ When a handler thread shows a dialog, the dialog's @method[dialog%
@scheme[semaphore-wait].
@subsection[#:tag "mr:currenteventspace"]{Creating and Setting the Eventspace}
@subsection[#:tag "currenteventspace"]{Creating and Setting the Eventspace}
Whenever a frame, dialog, or timer is created, it is associated with
the @deftech{current eventspace} as determined by the
@ -858,23 +858,24 @@ The @scheme[make-eventspace] procedure creates a new
]
When an eventspace is created, it is placed under the management of
the @tech{current custodian}. When a custodian shuts down an
eventspace, all frames and dialogs associated with the eventspace are
destroyed (without calling @method[top-level-window<%> can-close?]
or @xmethod[top-level-window<%> on-close]), all timers in the
eventspace are stopped, and all enqueued callbacks are removed.
Attempting to create a new window, timer, or explicitly queued event
in a shut-down eventspace raises the @scheme[exn:misc] exception.
the @tech[#:doc reference-doc]{current custodian}. When a custodian
shuts down an eventspace, all frames and dialogs associated with the
eventspace are destroyed (without calling @method[top-level-window<%>
can-close?] or @xmethod[top-level-window<%> on-close]), all timers
in the eventspace are stopped, and all enqueued callbacks are
removed. Attempting to create a new window, timer, or explicitly
queued event in a shut-down eventspace raises the @scheme[exn:misc]
exception.
An eventspace is a @techlink{synchronizable event} (not to be confused
with a GUI event), so it can be used with @scheme[sync]. As a
synchronizable event, an eventspace is in a blocking state when a
frame is visible, a timer is active, a callback is queued, or a
@scheme[menu-bar%] is created with a @scheme['root] parent. (Note
that the blocking state of an eventspace is unrelated to whether an
event is ready for dispatching.)
An eventspace is a @techlink[#:doc reference-doc]{synchronizable
event} (not to be confused with a GUI event), so it can be used with
@scheme[sync]. As a synchronizable event, an eventspace is in a
blocking state when a frame is visible, a timer is active, a callback
is queued, or a @scheme[menu-bar%] is created with a @scheme['root]
parent. (Note that the blocking state of an eventspace is unrelated
to whether an event is ready for dispatching.)
@subsection[#:tag "mr:evtcontjump"]{Exceptions and Continuation Jumps}
@subsection[#:tag "evtcontjump"]{Exceptions and Continuation Jumps}
Whenever the system dispatches an event, the call to the handler
procedure is wrapped so that full continuation jumps are not allowed