* decode-x-button-code was using incorrect bounds check:
diff -wru ../mcclim-cvs/Backends/CLX/port.lisp ./Backends/CLX/port.lisp
--- ../mcclim-cvs/Backends/CLX/port.lisp	2008-05-12 20:04:39.000000000 -0700
+++ ./Backends/CLX/port.lisp	2008-10-16 18:18:27.000000000 -0700
@@ -615,10 +615,11 @@
                                   +pointer-wheel-up+
                                   +pointer-wheel-down+
                                   +pointer-wheel-left+
-                                  +pointer-wheel-right+)))
-    (and (> code 0)
-         (<= code (1+ (length button-mapping)))
-         (aref button-mapping (1- code)))))
+                                  +pointer-wheel-right+))
+        (code (1- code)))
+    (when (and (>= code 0)
+               (< code (length button-mapping)))
+      (aref button-mapping code))))
 
 ;; From "Inter-Client Communication Conventions Manual", Version 2.0.xf86.1,
 ;; section 4.1.5:

* map-over-command-table-translators,
* add-actual-presentation-translator-to-command-table:
diff -wru ../mcclim-cvs/commands.lisp ./commands.lisp
--- ../mcclim-cvs/commands.lisp	2008-04-20 00:19:10.000000000 -0700
+++ ./commands.lisp	2008-10-16 18:20:56.000000000 -0700
@@ -480,6 +480,39 @@
           (map-over-command-table-menu-items function table))))
     (values)))
 
+(defun map-over-command-table-translators
+    (function command-table &key (inherited t))
+  (flet ((map-func (table)
+           (maphash #'(lambda (k v)
+                        (declare (ignore k))
+                        (funcall function v))
+                    (slot-value
+                     (presentation-translators table)
+                     'translators))))
+    (let ((command-table (find-command-table command-table)))
+      (if inherited
+          (apply-with-command-table-inheritance #'map-func command-table)
+          (map-func command-table)))))
+
+;(defun add-presentation-translator-to-command-table
+;    (command-table translator-name &key (errorp t))
+; - fixme; spec says this fun is given a translator name, but that
+; find-presentation-translator needs a translator name and a command
+; table designator
+(defun add-actual-presentation-translator-to-command-table
+    (command-table translator &key (errorp t))
+  (let ((translators
+         (presentation-translators
+          (find-command-table command-table))))
+    (when (and errorp
+               (second
+                (multiple-value-list
+                    (gethash (name translator)
+                             (slot-value translators 'translators)))))
+      (error 'command-already-present
+             :command-table-name command-table))
+    (add-translator translators translator)))
+
 ;; At this point we should still see the gesture name as supplied by the
 ;; programmer in 'gesture'
 (defun %add-keystroke-item (command-table gesture item errorp)

* seos-write-string sometimes gets called with zero-length strings,
* which have a split of 1 assigned when the stream eol action is
* :wrap, which eventually gets passed as the :end parameter to
* text-size, which causes a bounding indices error.  alternate fix:
* change (1+ start) to (min end (1+ start)) in :wrap case of
* seos-write-string.
diff -wru ../mcclim-cvs/stream-output.lisp ./stream-output.lisp
--- ../mcclim-cvs/stream-output.lisp	2008-04-15 12:28:04.000000000 -0700
+++ ./stream-output.lisp	2008-10-16 18:21:22.000000000 -0700
@@ -287,6 +287,8 @@
 						   :text-style text-style)
 	       while (<= sub-width delta)
 	       finally (return (1- i)))))
+      (when (eql end 0)
+        (return-from seos-write-string))
   
       (with-slots (baseline height vspace) stream
 	(multiple-value-bind (cx cy) (stream-cursor-position stream)

* minor spelling corrections
diff -wru ../mcclim-cvs/Drei/drei-clim.lisp ./Drei/drei-clim.lisp
--- ../mcclim-cvs/Drei/drei-clim.lisp	2008-04-30 23:48:21.000000000 -0700
+++ ./Drei/drei-clim.lisp	2008-10-16 18:22:02.000000000 -0700
@@ -57,10 +57,10 @@
 ;;; though.
 
 ;;; Cursors are output records. After a cursor is created, The owning
-;;; Drei instance instnace should add it to the output stream. The
-;;; owner of the cursor (a Drei instance) is responsible for removing
-;;; the cursor once it is done with it. Cursors can be active/inactive
-;;; and enabled/disabled and have the same activity-status as their
+;;; Drei instance should add it to the output stream. The owner of the
+;;; cursor (a Drei instance) is responsible for removing the cursor
+;;; once it is done with it. Cursors can be active/inactive and
+;;; enabled/disabled and have the same activity-status as their
 ;;; associated view.
 (defclass drei-cursor (standard-sequence-output-record)
   ((%view :reader view
diff -wru ../mcclim-cvs/input-editing.lisp ./input-editing.lisp
--- ../mcclim-cvs/input-editing.lisp	2008-02-07 12:20:04.000000000 -0800
+++ ./input-editing.lisp	2008-10-16 18:21:38.000000000 -0700
@@ -28,7 +28,7 @@
 (in-package :clim-internals)
 
 (defvar *use-goatee* nil
-  "I true, use the Goatee editing component instead of Drei. The
+  "If true, use the Goatee editing component instead of Drei. The
 Goatee component is faster and more mature than Drei.")
 
 (defvar *activation-gestures* nil




