Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
|Links to McCLIM-0-9:||(view) (annotate)|
Need a #+CLIM-MP condition in DISOWN-FRAME as well, to prevent trying to take the event queue of a sheet in single-process mode. (missed this in my earlier commit)
Some cleanup and missing functions
Set up an input context for commands when there's no interactor pane. Be more liberal in accepting clause arguments for tracking-pointer. Translate from CLIM line-cap names to XLIB names.
Oops, single-threaded CLIM uses a different input mixin on sheets. Conditionalized some event queue querying so that hopefully it doesn't break in that situation.
Cleanups related to port-force-output - adopt/disown-frame are the correct places to change a queue's port. Also, avoid a trip into the debugger in case somehow these do not get set, since flushing the output buffer is optional.
More scigraph hacking
Conditionalization (not complete) of scigraph for McCLIM and OpenMCL
In :before method on frame-input-context-track-pointer which handles presentation highlighting, specialize the stream argument on output-record-stream. Factor most of frame-input-context-track-pointer into a seperate function, frame-highlight-at-position, so tracking-pointer can highlight presentations without kludgery of the event queue.
Christophe Rhodes' improved defgeneric definitions. Early work on the partial command processor.
Frame top-levels are supposed to bind *default-frame-manager*. Added this to the RUN-FRAME-TOP-LEVEL :AROUND method.
In DEFAULT-FRAME-TOP-LEVEL, if there is no interactor pane to use, call SIMPLE-EVENT-LOOP.
Attempt to address the annoying CLX buffering issues, by calling XLIB:DISPLAY-FORCE-OUTPUT when applications check their event queues. * Created a subclass of STANDARD-EVENT-QUEUE called PORT-EVENT-QUEUE, which knows what port will be putting events on the queue. (Arguably I could've just added a port slot to STANDARD-EVENT-QUEUE either directly or through a mixin, or even added a slot for a "force output" hook, but this is what I've done for now.) * When creating frames or sheet-with-input-mixins, use PORT-EVENT-QUEUE instead and initialize the PORT slot. * Introduced a new method, PORT-FORCE-OUTPUT. * Wrote :before methods on EVENT-QUEUE-READ, EVENT-QUEUE-PEEK, etc, which call PORT-FORCE-OUTPUT. * Before exiting RUN-FRAME-TOPLEVEL, be sure to get the port from the frame manager and call PORT-FORCE-OUTPUT on that too, to make sure the app window really goes away when it should instead of being stuck in limbo. * Also squashed a couple warnings in Backends/CLX/image.lisp from bad format strings to ERROR.
Factored the pane redisplay logic in the top level loop into its own function, REDISPLAY-CHANGED-PANES.
initial attempt at implementing the :geometry option to define-application-frame
Optimizations for text output... frames.lisp: Leave the stream text cursor invisible by default. graphics.lisp: Make DO-GRAPHICS-WITH-OPTIONS-INTERNAL smarter about not changing the medium's ink, clipping region, text style, and line style, unless they've really changed. panes.lisp: Removed some dead code (of my own). recording.lisp: Rewrote RECOMPUTE-EXTENT-FOR-CHANGED-CHILD. For the most common case of the child growing while fully containing its original bounding rectangle, it is possible to compute the parent's new bounding rect without recomputing the extent of all the children. This is a significant improvement.
Input focus work - (setf port-keyboard-input-focus) was not really calling set-input-focus, just changing the slot in the application frame.
Got OPEN-WINDOW-STREAM working. There are a few things about window-streams that are still not perfect: Output in the window stream does not seem to influence the scroll bars. The existing code initialized the interior pane to an arbitrary size and I've left it that way. This needs to be fixed. Apparently the common mode of using window-streams was to have them share the input buffer of their parent window. In this case, what to do when the parent closes? For window-streams with their own input buffer, I start a new thread and run a minimal toplevel to handle events. If the window is instead sharing the input buffer, shutdown of the main *application-pane*'s toplevel will leave the window(s) in limbo with no one handling their events. There are maybe three approaches to handling this: 1) Assume the parent window has responsibility for closing any window streams it opens. (bleh) 2) Record them somewhere and close them. 3) Make them work automagically. To implement #3, we'll have to keep track of these window streams somewhere, and arrange to have an event handling thread started in the case of the main toplevel shutting down. A good argument against NOT using the :input-buffer argument to OPEN-WINDOW-STREAM. Something to think about.
Reworking of input focus handling - track keyboard focus per-frame rather than per-port, and set appropriate WM hint/protocol to implement what the ICCCM defines as "Locally Active" focus. port-keyboard-input-focus is still around, but now changes the frame input focus through clim:*application-frame*. This makes multiple application frames play nice with each other. You can also now move the pointer out of the window and still type to it, if your WM allows that sort of thing.
Change presentation-subtypep for command-name and command. See comment above command-table-inherits-from-p. Change menu code to throw menu-item presentation types instead of commands; accept that in read-frame-command. The menutest example works again, although the highlighting is a bit broken. clim-fig's menus don't work yet; I need to figure out why clim-fig still needs its own top-level to work.
LAYOUT-FRAME (APPLICATION-FRAME ...) Actually resize the top-level sheet. But don't if it does not really change its size.
quote #: forms when needed
make all code lowercase for ACL's java mode - leave gensyms alone
make all of the package names passed to in-package be lowercase keywords for ACL's java mode
Output record values are stored in stream coordinates, not user (post medium transformation) coordinates. All medium state values are stored in output records by individual mixin classes that are assembled for each output record type. Medium parameters are only set in replay-output-record, not set and restored. Medium values are set/restored in replay. Checkpoint of incremental redisplay, currently disabled. Implement match-output-record.
remove redundant declarations and definitions
3 sets of additions/changes/fixes: presentation-replace-input Bugs I fixed while at ILC, including implementing accept-from-string. Fixes made in the course of getting cl-reversi to work (it mostly does modulo display timing issues). This includes a revamping of command tables, menus and keystrokes.
Commit of patch submitted my Oliver Markovic. Original message: Message-ID: <firstname.lastname@example.org> From: Oliver Markovic <email@example.com> To: firstname.lastname@example.org Subject: Protocol Classes Date: Sat, 09 Nov 2002 22:06:50 +0100 Hi, Attached is a patch, which uses DEFINE-PROTOCOL-CLASS for all protocol classes as defined in the spec (not all were using that macro). I also added simple docstrings to the macro and changed the error message to something more civil :-) This should also add some required predicates, which were missing. I also noticed that protocol classes were given slots contradicting the definition in 2.5: "A protocol class is an "abstract" class with no slots and no methods (except perhaps for some default methods) [...]". But I guess that's no serious deviation from the spec though. greetz, -- Oliver Markovic
MAKE-PANES-GENERATE-PANES-FORM fixed visual glitch, menubars now come with their own raised border.
language support for text-styles, korean font support, support for 16 bit fonts, support for font composition, support for timer events, some cosmetic changes, support for unicode characters, etc. A bit much at once, and hopefully it won't break for anyone who isn't using unicode enabled cmucl.
Fixed bug reported by Paul Werkowski; coordinate sequences can now be lists or vectors. Introduced a do-sequence macro that has similar semantics to dotimes and dolist as well as features of map-sequence. Implemented frame-state (except for :shrunk). Changed timing of when frames are generated, adopted and enabled to follow the spec. Fixed clim-fig to adapt to this new world order. Disable the frame when the top level function exits. Remove erroring methods for copy-to-pixmap (stream ...) and friends. Wrote a with-keywords-removed macro that attempts to be efficient about about removing arguments from argument lists.
Uncommented menu-choose.lisp from the system definition. I'm using it so it's not experimental, damn it :) Possibilities gestures for command completion. C-/ and right mouse bring up possibilities menus. Make user-command-table inherit from global-command-table. Implement keyword arguments in commands. Implement the "read" part of the pointer protocol. Added accept method for sequence presentation type. Change handling of *null-presentation*. This isn't traversed in find-applicable-translators / map-applicable-translators anymore; it's handeld in find-innermost-presentation-match. Gave a raised appearance to menus drawn with menu-choose and friends. Someone who knows what they're doing should look over what I did. Steps towards implementing line wrap in Goatee. Fixed bug in insert-obj-before pointed out by someone on IRC.
Handle key events for modifier keys in order to keep track of modifier state. Implement keyboard-event-character. Store coordinates of pointer in key events. Don't set the sheet of key events to the sheet with focus. The wait test and input handler functions now respond to key events. The frame pointer documentation functions react if the modifier state has changed. Make a little protocol out of the pointer documentation update operation. Fix typo: too many n's in find-innnermost-presentation-context.
Make the pointer documentation window more pretty. Add a describe-presentation command in order to have some command bound to the super modifier. Move coordinates into the device-event class. Supply coordinates for key events. Add make-load-form methods for named-color and standard-text-style. This, plus some strategic eval-when (:compile-toplevel ...), allows us to remove the defparameter/defconstant hack for CMUCL (and SBCL too, though I haven't tested that and didn't do the work). Mention possible problem with CLOCC and pcl::*defclass-times* et al. in instructions.
Further hacks to pointer documentation. Indicate that different commands are available with other modifier keys. Tim
First try at pointer documentation.
* (SLOT-VALUE frame 'MANAGER) -> %FRAME-MANAGER. * DISOWN-FRAME (FRAME-MANAGER APPLICATION-FRAME): Don't call (SETF FRAME-MANAGER).
* Small fixup.
* RUN-FRAME-TOP-LEVEL: Added &KEY arguments.
* Fixed small typos.
DEFAULT-FRAME-TOPLEVEIL: Clear panes with their history.
* Fixed CLIM-STREAM-PANE for single-process mode.
* DEFAULT-FRAME-TOPLEVEL: Clear window with WINDOW-ERASE-VIEWPORT instead of WINDOW-CLEAR.
GENERATE-PANES :after t application-frame I invoke ALLOCATE-SPACE now to have sheet's nicely layout, when the application frame eventually gets mapped. [hopefully last commit for now...]
Changed implementation of low-level streams code once again. This does away with the fill-vector stream buffer and uses the event queue directly. Sorry mikemac, I should have listened to you :) If this change isn't controversial I'll write something in the manual about this deviation from the spec. By default all panes in a frame now share the same event queue. I believe this mimics the behaviour of real CLIM. Could people who aren't doing multiprocessing -- e.g. SBCL users -- give this a try? It should fix the existing streams/presentation breakage.
Presentation translators, including define-presentation-to-command-translator and command translators generated by the :gesture option in define-command arguments. With this checkin the address book demo mostly works as intended, except for creating new address book entries. Added builtin-commands.lisp to hold global commands and presentation translators. Added a nifty help command with context sensitive command names.
clean up a bunch of ACL compiler warnings
Major new functionality: command processing with completion. Check out the address-book demo. In it, all commands are available on the command line. Completion and editing work. Prompts for input show up on *debug-io* for now, but otherwise command input is accepted from presentations. 2002-05-08 Tim Moore <email@example.com> * commands.lisp: Implemented the magic argument parser function for commands. Defined presentation types for command-name and command, as well as present and accept methods for them. (command-line-parser, command-line-unparser): Implemented. (define-command): Changed the :name argument to define-command to default to t which goes against the spec; this gives us some interesting command line parsing in the address book demo. I'll change it back when we have presentation translators. * frames.lisp (default-frame-top-level): changed default prompt to "Command: ". Don't echo results of commands. (execute-frame-command): Apply command name to command arguments like the spec says. * input-editing.lisp (stream-read-gesture): set rescanning to nil after reading a new gesture from the underlaying stream. (with-delimiter-gestures): Implement. (input-editor-format): Direct output to *debug-io* for now. (read-token): Handle null gestures, which shouldn't happen, but might after a stream is activated. (simple-parse-error): Fix :format-control initarg. (*completion-gestures*, simple-completion-error, complete-input, complete-from-generator, complete-from-possibilities, completing-from-suggestions): Implement. * ports.lisp (distribute-event): Change sheet of keyboard events to the sheet with input focus. * presentations.lisp (fake-params-args): Generate dummy args for optional and keyword arguments so their defaults don't need to be evaluated at compile time. (define-presentation-method): Set up a block with the same name as the method around the method body. (method presentation-typep): default method. (method presentation-type-of (standard-object)): Don't fail if the presentation type has no parameters. (method description (standard-class)): Add. (highlight-applicable-presentation): Don't pass through button events to the stream; handle them here. (accept): Provide a default :default-type argument if :default is specified. (method stream-accept (standard-input-editing-stream)): add. (accept-1): Respect replace-input argument. (prompt-for-accept): Work on any stream. (prompt-for-accept-1): Tweak default prompt for recursive accept. (method present): Define default method. (accept-using-read): Take read-eval as an argument. (method accept): Define default method. (presentation-method presentation-type-of (string)): Return a more general result. * stream-input.lisp (gesture-name command-delimiter): Define. * system.lisp: Reenable the address book demo. * Backends/CLX/port.lisp (method realize-mirror (clx-port application-pane)): Add to register for pointer motion events. * Goatee/buffer.lisp: Added buffer pointers, which maintain their relative position across inserts and deletes. (bp-buffer-mixin, bp-buffer-line): Classes for buffer pointers. Added all the buffer protocol functions for buffer pointers. * Goatee/editing-stream.lisp (location*-offset*): Old offset-location* :) (offset-location*) New function to return a stream offset from a buffer location. (replace-input): Rewrite to preserve insertion pointer, using buffer pointers. * Goatee/goatee-command.lisp: Add #\tab as an insertable character.
Fixed a bug in frame-input-context-track-pointer that was causing a draw-rectangle* call on every motion event. The vertical spacing for standard-extended-output-stream was, in effect, being added twice to start dimensions for each line. After fixing that, plus some stuff in Goatee/clim-area.lisp, input editing regions line up with other text on the same line. Implemented replace-input, presentation-replace-input, and write-token. Implemented the input-sensitizer argument to with-input-editing. Accept now replaces input editing text with input from button gestures and makes the (now uneditable) input editing text sensitive as a presentation. In Goatee: Beefed up buffer-close-line* to be able to delete lines backwards as well, simplifying delete-char in the process.
More removal of spurious warnings by - adding more declarations to decls.lisp - moving common code from gadgets.lisp to panes.lisp - also moving draw-design to graphics.lisp
OpenGL backend now draws stuff (but not much else). Misc cleaning up, some regions debugging.
RUN-FRAME-TOP-LEVEL added ignore declaration MAKE-SINGLE-PANE-GENERATE-PANES-FORM Switched LISTP into CONSP. Is that the right thing to do?
Fixed a typo in frames.lisp, *multiprocesing-p* with 2 p.
Remove reference to sb-pcl in sheet-adopt-child. Add the medium- accessors for sheets. Get Goatee to compile.
Sundry fixes to run without multiprocessing support. Added images/ to hold bitmaps for tests. Added looks/ to hold neutral look-and-feel realizer packages. Added Examples/gadget-test to test many gadgets with a look and feel. Added a pixie look and feel, and a pixie/clx to work with the clx backend. Added drawing support in the CLX backend for ovals and circles. Fixed pixmaps to work with with-output-to-pixmap with draw-image, etc. Moved sheet-leaf-mixin to standard-gadget-pane so it doesn't break radio-box-pane, etc. Misc fixes.
Make a global choice, based on multiprocessing or not, whether events should be handled immediately or queued up to be serviced by another process. The choice is implemented by the classes clim-sheet-input-mixin and clim-repainting-mixin, from which all panes inherit. These classes' superclasses are conditionalized on whether or not the implementation is capable of multiprocessing. When multiprocessing there is a single event queue per frame. This is implemented by queue-event on pane classes. The event loop is implemented in stream-input-wait. In single processing mode, stream-input-wait calls process-next-event and handles events immediately. When multiprocessing, stream-input-wait reads events from the frame event queue and handles them. The function clim-extensions:simple-event-loop is supplied for applications which do not loop reading from a stream; various examples have been changed to use it. In stream-read-gesture/stream-input-wait the input-wait-test function is not expected to block anymore; nor is the input-wait-handler expected to dispatch events. input-wait-handler is responsible for consuming events that should not be seen by anyone else. input-context-wait-test and highlight-applicable-presentation have been rewritten to reflect this. The adjustable-array buffer for extended-input-streams has been added back in. A typo in %event-matches-gesture has been fixed. Default methods for map-over-output-records-containing-position and map-over-output-records-overlapping-region have been added. The cursor implementation has been broken out into a cursor-mixin so I can snarf it for Goatee :)
Don't depend on condition slot reader functions being generic functions. It might be required by the HyperSpec, but CMUCL doesn't work that way and we don't need to rely on the behavior.
fixed a couple of typos
Checkin to get context sensitive input working with multi-threaded process-next-event. Set input focus in run-frame-top-level. Assume that someday, in the presence of multiple frames, we'll do the right thing with switching the input focus from frame to frame. Added a frame-intercept-event-queue to frames. process-next-event examines the frame associated with the pane that has input focus and puts device events on that frame's queue if desired. Rewrote stream-input-wait, stream-read-gesture and the with-input-context input-test and input-handler functions per mikemac's suggestions. The with-input-context stuff uses the intercept queue mechanism now. Fixed a typo in gadgets.lisp.
added define-frame-command and define-command support - still doesn't define the unnamed parser function
make window-manager-delete-event work
turn off the prompt since ACCEPT will do that
first cut at running the display-function
MAKE-PANES-GENERATE-PANES-FORM Panes generated in the :PANES section no are named automatically by evil slot access.
Context-sensitive presentations (sans translators) and highlighting. Fix pointer-event-[xy] to use the sheet native transformation correctly. Check out the presentation-test demo; not much, but I think it's cool :)
Implement extended input streams, stub of input editing streams and enough of encapsulating streams to support input editing. A few random bug fixes too.
remove compiler warnings for ACL
typo fix from Paul Werkowshi
* DEFAULT-FRAME-TOP-LEVEL (APPLICATION-FRAME): Do STREAM-FINISH-OUTPUT after printing a prompt.
* Generic function descriptions added * FIND-PANE-IF: New function * FIND-PANE-OF-TYPE: Use FIND-PANE-IF * FRAME-CURRENT-PANES, GET-FRAME-PANE: New functions * FIND-PANE-NAMED, FRAME-POINTER-DOCUMENTATION-OUTPUT: Search through the whole tree of panes
* FIND-PANE-NAMED: use FIND * READ-FRAME-COMMAND: STREAM argument is &KEY
Change the compute-and-set-space for compose-space
bug fixes by Paul Werkowski
Replaced calls to compose-space by calls to compute-and-set-space.
changed with-look-and-feel mechanism, execute-command just calls eval - still a kludge
Added support for menu frames. Didn't factor commonalities between application frames and menu frames yet.
changed generate-panes algorithm to allow pane constructor functions
Exchanged order of definitions of frame-manager and frame classes to avoid compile-time message. Removed unused definition of calculate-standard-panes. Changed order between adopt-child and compose-space. Now, the mirrors of the sheets in the pane hierarchy are realized first. Their sizes are arbitrarily assigned, since the space allocation protocol has not been invoked yet. Then compose-space and allocate-space are run to adjust all the sizes. This order allows us to determine space requirements of certain panes from their contents, which requires the pane to be grafted so that font sizes are known.
Changed type of top-level sheet to make it possible for it to react immediately to resize events. Fixed copyright message to reflect modifications.
Improved the way adopt-frame creates the panes.
Don't redirect *error-output* during development to faclitate debugging
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|