Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
Use force-output instead of finish-output as the latter implies waiting for an answer from the display server, which is something we really do not want to do.
Read arguments for partial commands from partial menu entries even when the input stream isn't an interactor pane. Use *partial-command-parser* to do that rather than hardwiring command-line-read-remaining-arguments-for-partial-command.
The spec says that PORT is an accessor on frame-manager; remove CLIMI::FRAME-MANAGER-PORT and implement PORT instead. Fixup all uses that I can find. (Motivated by Climacs's own frame management)
Change default text and prompt style to sans-serif, except for forms in the listener.
Added restart for re-executing commands.
Added some convenient restarts for when the output history gets messed up due to errors.
Go some way towards fixing the minibuffer debacle. Drei will no longer attempt to create a minibuffer on its own pane. Commands that need the minibuffer, when none is available, will fail somewhat gracefully. Pointer documentation isn't broken yet, even with all the pointer-documentation-pane abuse I'm doing. I'll have to work on that.
Added some amazing hacks to pointer-documentation-panes for the notion of a "background message". This is the beginning of extending pointer-documentation-panes into more generally useful minibuffer-like panes. For now, this just means that the Listener shows arglists and other things for Drei commands. It's still a little flickery, though.
Committed patch from Nikodemus Siivola fixing undefined variables.
After disabling a frame, call port-force-output.
Change frame-geometry* so that when subclassing application frames, the geometry specified in a superclass is inherited as you'd expect.
Patch by Robert Goldman, make menu commands with unsupplied arguments work better.
New click-to-focus policy for text-editor gadgets and panes, implemented for the CLX, Null and gtkairo backends (but gtk_window_get_focus() hand-inserted into gtkairo/ffi.lisp). PORT-KEYBOARD-INPUT-FOCUS is now a trampoline to PORT-FRAME-KEYBOARD-INPUT-FOCUS, a per-port function to set the keyboard focus for a particular frame. Not implemented for Beagle or OpenGL backends. Now Drei / Goatee gadgets don't have to do their own keyboard focus handling on arm/disarm any more. Various kludges sprinkled all over the place to make this so.
Make :default-initargs work as a parameter to define-application-frame.
Just a whitespace fixup
In find-frame-manager, don't choose the current or default frame managers if this would contradict the :port argument.
Support pane-names in `redisplay-frame-pane', patch from Raymond Toy.
Fix command menus in frames with no interactor (or application-pane?) by making read-frame-command handle the case :stream nil by calling the simple event loop. Changed the default top level to call read-frame-command with a null stream rather than calling the simple event loop directly. Previously the command menu would throw a menu-item, but because the receiving code is in the :around method on read-frame-command (and thus not executed), the menu selection was ignored. Metaphorically, the "read a command" operation should be applicable even when the textual command parser is not invoked.
Many more generic function defgenerics in decls.lisp ... moving some out from their individual files. ... one or two tiny code cleanups I think the only substantive changes in this commit are: * remove the workaround for sbcl-0.9.8 broken forward-referenced-class metacircularity; * delete the unused uniform-design protocol-class; * put the standard-sheet-input-mixin as a superclass of standard-extended-input-stream, not of the protocol class extended-input-stream. If someone wants to tell me that these things are wrong, that's fine; at least some things appear still to work. Now we only emit 209 style warnings when loading mcclim under sbcl. (When compiling and loading, it's closer to 500). This commit cures all but a few redefinition style-warnings -- so now almost all generic functions are defined before the first method definition is seen. It doesn't cure implicit definition of generic function style warnings, so there are probably plenty of specified generic functions which are not explicitly defined. (Leaving aside the issues with unspecified generic functions) TODO: * DEFGENERIC* forward declarations * specified methods and macros * specified special variables * unification of protocol-classes and decls
Take out dependencies on case in symbol names. This makes McCLIM sort of work in ACL's so-called modern mode; there have been some CLX fixes recently that may get it all the way there. Clean up events.lisp. Add a callback-event, which will be used in ports that get high-level gadget notifications in the event process and need to deliver them to applications. Changed the implementation of scroll bars. When the drag callback is called, just move the sheet; assume that the gadget itself has updated the value and the graphic representation. add a scroll-bar-values interface that gets and sets all scroll bar values and only updates the bar once. This will break the Beagle back end momentarily.
Fixed destination highlighting for drag-and-drop translators. Added documentation for dnd translators. Corrected the default value for modifier-state in find-innermost-applicable-presentation and friends. This isn't as big as it looks :)
drag-and-drop mostly working except for highlighting of destination presentations
drag-and-drop, not quite working yet
Move most protocol class definitions into protocol-classes.lisp, which is compiled and loaded early. Some class definitions, which had slot definitions that I didn't have the stomach to tease apart, stayed behind. Replace the presentation documentation state mechanism with updating-output so that other functions / programs can write to the pointer documentation area and not screw things up. We still use the state to actually print the documentation.
Put (declare (ignorable frame-class)) in the right function
Implemented destroy-frame and map-over-frames. Implemented find-application-frame from the Franz User Manual. CLIM Launcher folks might want to take a look at it.
EXECUTE-FRAME-COMMAND When called from another process, pass command as EXECUTE-COMMAND-EVENT to the frame. So that commands are always executed in sync with the command loop. However, my method to check for being in frame process is far from perfect.
Implemented double buffering for CLIM stream panes that want it. Use the `:double-buffering t' initarg to obtain it.
Initial cleanups to incremental redisplay.
Check in nyef's partial fix for changing frame layouts. Added comment protesting default of :use-keystrokes t in the spec. Corrected a spelling error.
Fix mixed up arguments to set-port-keyboard-focus. Renamed set-port-keyboard-focus to %set-port-keyboard-focus to avoid confusion with the CLIM 2.0 function port-keyboard-input-focus. Added a timestamp keyword to %set-port-keyboard-focus (not used by any callers yet). Added some comments about how the keyboard focus functions are connected.
Hammered on with-room-for-graphics. It should now leave the cursor in the right place and do the right thing with respect to recording options. Changed with-drawing-options to not rebind its medium argument at all. Added :label and :scroll-bars arguments to with-menu which are currently ignored.
Eat the pointer-release events from a menu choose action. Otherwise, they will still be around when if a command, invoked by the menu, starts looking at the event queue. Completely bypass the standard presentation translator mechanism when determining whether to call the presentation clauses in TRACKING-POINTER. Presentation translators and actions can't do anything here.
Added a keyword to make-menu-frame to control the minimum width allocated to the menu.
In tracking-pointer, don't discard the event when calling the handler. Fix bug induced by clicking presentations outside of menu-choose menus. Make mouse-wheel scrolling work when mixed into arbitrary panes. Defined new GF SCROLL-QUANTUM to control unit of scrolling (defaults to text-height on stream panes, 10 pixels elsewhere). Rework CLX frame-manager pane lookup - choose by presense of defined classes rather than mere existance of a symbol. Added a function DEFINE-ABSTRACT-PANE-MAPPING to specify alternate mappings to concrete panes (such as GENERIC-OPTION-PANE, GENERIC-LIST-PANE, which were not handled correctly before). Hopefully this is a step toward a future mechanism that addresses the needs of multiple frame-managers and themes. Implement (reimplement?) GENERIC-LIST-PANE based loosely on the existing code. Supports single or multiple-item selection modes, toggling items via control key (with an optional :prefer-single-item initarg which causes a :nonexclusive list to prefer selecting single items without disallowing multiple selections). Selection of item ranges via the shift modifier. Scroll wheel support. Supports :one-of and :some-of aliases for :exclusive and :non-exclusive (Lispworks compatibility).
Implement PRESENTATION-TYPE-DIRECT-SUPERTYPES. Three bug fixes from email@example.com (Milan Zamazal): pass :allow-other-keywords to invoke-pointer-tracking-loop fix in (generate-panes :before) for disowning and then reowning a frame fix colorslider demo
Improved (fixed) support for keystroke accelerators --------------------------------------------------- File commands.lisp: add-command-to-command-table: When given a keystroke, call add-keystroke-to-command-table. %add-keystroke-item: Changed error handling logic, added support for literal keystroke specifications remove-keystroke-from-command-table: When searching keystroke accelerators, use :test #'equal New function partial-command-from-name, which given a command name produces a command whose requried args are *unsupplied-argument-marker* lookup-keystroke-command-item: Add support for keystroke accelerators which specify only a command name. A partial command is created via partial-command-from-name. Class command-parsers: Added slots required-args and keyword-args, needed in order to construct a partial command. %define-command: Init required/keyword arguments in command-parser object read-command-using-keystrokes: Invoke partial command parser if a partial command is returned. File events.lisp: Add :wheel-up and :wheel-down to key-modifier-state-match-p button mapping. (This has been sitting around my tree for months, but somehow never got committed..) File frames.lisp: In read-frame-command, supply ':use-keystrokes t' by default. File stream-input.lisp: Factored the bulk of add-gesture-name out into a new function, realize-gesture-spec, which converts modifier names to symbols and does general massaging of the gesture specification. Added translations for :wheel-up, :wheel-down device names, which have also been sitting around my tree for months. realize-gesture-spec: Don't signal an error if the device-name is not found in +name-to-char+, doing so would preclude the use of port-specific keyboard gestures. %event-matches-gesture: In the method specialized on key-press-event and gesture type :keyboard, compare against the key-name of the event when there is no key-character available, so that we can match keys/gestures outside the CL character set via device names. event-matches-gesture-name-p: Added the ability to match against other than defined gesture-names. Specifically, it can now match against a 'physical' gesture-spec of the form (type device-name modifier-state). Matching against characters is also supported. Fix random typo. Misc changes ------------ recording.lisp: Comment on 'constructor' arg to invoke-with-output-recording-options, use of untransform on rotation angles. table-formatting.lisp: Supply required 'constructor' arg, which was missing.
Remove problematic (for CMUCL) use of (make-instance ... :allow-other-keys t) Add a (declare (ignore ...)) to one of the new invoke-with-output-to-output methods.
dragging-output and drag-output-record. I rewrote the tracking-pointer implementation to follow a little protocol. Work is in progress on presentation drag-and-drop translators. The :incremental-redisplay option in a pane specification can be a list of arguments that will be passed to the call to redisplay. This change is described in the Franz user manual. Added some checks of :check-overlapping in the incremental redisplay code. Changed funcall-presentation-generic-function to call the private generic function directly, bypassing %funcall-presentation-generic-function. Added the :parent keyword to invoke-with-new-output-record. Optimized the table layout code a bit. Avoid traversing the whole table hierarchy: stop at the level of interest. Use arrays instead of lists in adjust-table-cells. Patch for SBCL package locks from Nikodemus Siivola (firstname.lastname@example.org). Listener SBCL fixes from Christophe Rhodes (email@example.com)
Fixed (actually, Tim fixed) a problem where panes were cleared before redisplay, even though :no-clear was specified at pane creation time.
Fix for problem with named panes constructed using a user-supplied form to call MAKE-PANE -- because adding the pane to the frames list of named panes is handled during pane construction within MAKE-PANE-1, a name supplied to DEFINE-APPLICATION-FRAME was not known at the time of construction and was not handled properly. Fixed this with a change to DO-PANE-CREATION-FORM which passes the results of the user form to a new function (COERCE-PANE-NAME) which sets the name slot of the pane and adds it to the list of named panes, returning the modified pane. Add strings for +pointer-wheel-up+ and +pointer-wheel-down+ to +button-documentation+.
:GEOMETRY option to DEFINE-APPLICATION-FRAME and :TOP, :LEFT, :BOTTOM, :RIGHT, :WIDTH, :HEIGHT options to MAKE-APPLICATION-FRAME now should actually have effect.
Implement command-enabled and (setf command-enabled). This includes a test in command presentation translators that checks if the command is currently enabled. Menu items are disabled if the command is disabled, though buttons on menu bars aren't handled yet. Created a command com-describe-presentation that can be enabled/disabled seperately from com-describe.
Changes to turn off, and then turn on again, presentation highlighting when redrawing a pane, with the aim of fixing various screwups that happen with tricky presentation highlighting that uses +flipping-ink+. As part of this I removed redisplay-changed-panes and rewrote the CLIM standard functions redisplay-frame-panes, redisplay-frame-pane, and pane-redisplay-needed. I did various refactoring among methods on panes, frames, and updating-output-mixin too. Moved a bunch of :initform forms to :default-initargs. Random (declare (ignore ...)) to shut up compiler warnings.
Prompt for arguments in menu commands. Work in progress on the OpenGL backend. Merged Dan Barlow's SBCL condition variable changes for event queues and provide a reasonable implementation of condition variables for the implementations. This means no more busy-waiting. I've tested the OpenMCL version and will test the CMUCL implementation shortly; I haven't tested ACL or no multiprocessing. I've looked at LispWorks but don't know yet how to support condition variables there.
excess paran removed
Cleaned up the frame layout code. It's now possible to change layouts on the fly. Got rid of frame-pane and replaced it with a proper definition of frame-panes that conforms to the Spec. All the frame pane and layout functions in the spec should be implemented now. In presentation-replace-input, checked in a fix that I thought was already in.
When an application frame has no clim-stream-panes and therefore no viable *standard-input* and *standard-output*, bind the standard stream variables to their current value, not nil. This was causing an error in SBCL, which has type declarations on those variables, and some of the demos. Implement the :calling-frame initarg to make-application-frame. Currently it just shares the caller's event queue; I'm not sure if that's all it needs to do. Change demodemo.lisp to use :calling-frame.
Presentation histories. The new goatee command C-M y works reasonably well in the listener demo. More testing and user documentation is needed. Work in progress on the OpenGL backend.
Implemented command-or-form presentation type. Fixed stupid-subtypep so OR presentation types can be used in with-input-context. Changed the subform reader stuff to use a presentation type option instead of the presentation type subform. Got rid of subform altogether. Changed the Lisp presentation types to be a subtype of expression, not form; added a presentation translator from expression to form that does necessary quoting. Fixed passing of arguments to the frame-top-level function. Moved the menu-item stuff in read-frame-command into an :around method so that read-frame-command can be usefully overridden by users. Cleaned up the listener demo: got rid of the top level loop parts that are now redundant. Added a frame slot and an argument to run-listener/run-listener-process to control whether or not to use CLIM command-or-form processing (the default is the existing method.)
Fixed :command-definer keyword to define-application-frame. It was using the default name even when an alternate name was supplied.
Fixed Goatee problem with the area not being drawn initially. Implement :move-cursor option to surrounding-output-with-border. Use surrounding-output-with-border in accepting-values to make better-looking entry fields. Establish an abort restart in default-frame-top-level. Paul Werkowski's fix for menu command names. Added Raymond Toy's note about CLX and CMUCL.
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|