Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
|Links to HEAD:||(view) (annotate)|
Fixed EVENT-QUEUE-READ-WITH-TIMEOUT to return on timeout. Previously it would just continue silently. * input.lisp (EVENT-QUEUE-READ-WITH-TIMEOUT): return if condition-wait returns nil. * Lisp-Dep/mp-sbcl.lisp (CONDITION-WAIT): Return T from a normalcondition wait and NIL from a timeout, like mp-acl.lisp does it.
In EVENT-QUEUE-READ-WITH-TIMEOUT, warn about the WAIT-FUNCTION being ignored only if a WAIT-FUNCTION was specified.
Move scroll wheel code to panes.lisp, since it has nothing to do with event queues.
Fix event compression on single-process lisps. This consists of two changes: 1) Don't use immediate-sheet-input-mixin, and 2) When reading events from the backend, read all available events in a nonblocking fashion, so that events which have accumulated since we last checked can be compressed. This requires the backend 'get-next-event' to support :timeout 0. Currently CLX and Beagle appear to do so, while Gtkairo does not.
Remove superfluous closing-parenthesis.
Rewrite dispatch-event for mouse-wheel-scroll-mixin to work with left and right scrolling wheel buttons.
In condition-wait, pass through return value of OpenMCL function.
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).
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.
Scroll wheel support. Added new defconstants for +pointer-wheel-up/down+, and changed CLX backend to produce them. Handle scrolling using a DISPATCH-EVENT method specialized on mouse-wheel-scroll-mixin, and tentatively mixed this into clim-stream-pane.
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.
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.
Added a few "ignore" declarations to avoid compiler notes.
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.
Due to popular demand we spit FORMAT-style debugging messages out to *trace-output* instead of *debug-io*
Compression of resize events for toplevel windows.
make all of the package names passed to in-package be lowercase keywords for ACL's java mode
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.
Mike McDonald wrote in message <200211050453.gA54r1J32523@saturn.mikemac.com>: In ACL: ;;; Compiling file ./input.lisp 5007120 bytes have been tenured, next gc will be global. See the documentation for variable EXCL:*GLOBAL-GC-BEHAVIOR* for more information. ;;; Writing fasl file /home/mikemac/src/Lisp/McCLIM/input.fasl ;;; Fasl write complete ; Loading product for module: "input". ; Fast loading /home/mikemac/src/Lisp/McCLIM/input.fasl Error: Attempt to add the method #<STANDARD-METHOD EVENT-QUEUE-SCHEDULE (STANDARD-EVENT-QUEUE T T T) @ #x20931b5a> to the generic function #<STANDARD-GENERIC-FUNCTION EVENT-QUEUE-SCHEDULE> but the method has more required arguments than the generic function. [condition type: PROGRAM-ERROR] STANDARD-EVENT-QUEUE had a slot accessor defined by the name EVENT-QUEUE-SCHEDULE which is now removed and so this error should now be fixed.
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.
* Moved TRACKING-POINTER to a separate file. * Added tracking of presentations.
Initial implementation of TRACKING-POINTER.
Fixed problem Gilbert reported; event-queue-listen-or-wait was depending on the return result of process-wait which is not portable. Work in progress on incremental redisplay.
We have event compression now. EVENT-QUEUE-APPEND is responsible for that.
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.
EVENT-QUEUE-READ-WITH-TIMEOUT added EVENT-READ-WITH-TIMEOUT uses it
Fix various problems found by Robert. Repair and/or eliminate a bunch of dynamic-extent declarations that I screwed up.
Supply null handle-event for immediate-sheet-input-mixin. This should fix Brian's problems. Add a couple of text-style trampolines for sheets. Add an eval-when around with-presentation-types-decoded to satisfy ACL. Add a new macro, clim-defsystem, that does the right thing whether using mk:defsystem or not. Add a :clim-frontend target which is the same as the old :clim target; :clim now forces :clim-clx to load. Various fixes on the road to getting Goatee working.
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 :)
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.
unify the sheet-event-queue and the input buffer
Using two methods instead of IF now in DISPATCH-EVENT.
Implemented an input queue class. This still needs work for single threaded Lisps.
The mixin classes MUTE-SHEET-*-MIXIN are now called SHEET-MUTE-*-MIXIN in the new CLIM II Spec.
dispatch-event handles window events immediately
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|