logo       

bug: text-field gadget: msg#00067

lisp.mcclim.devel

Subject: bug: text-field gadget

In gadgets.lisp there is this comment:

;; Is there really a benefit to waiting until the first painting to
;; create the goatee instance? Why not use INITIALIZE-INSTANCE?
(defmethod handle-repaint :before ((pane text-field-pane) region)

<...>

and this method:

(defmethod (setf gadget-value) :after (new-value (gadget text-field-pane)
&key invoke-callback)
(declare (ignore invoke-callback))
(let* ((area (area gadget)) ;;;<<<< NIL
(buffer (goatee::buffer area))
(start (goatee::buffer-start buffer))
(end (goatee::buffer-end buffer)))
(goatee::delete-region buffer start end)
(goatee::insert buffer new-value :position start)
(goatee::redisplay-area area)))

which fails when (setf gadget-value) is called before the text-field is
displayed on screen.
Result is dreaded NO-APPLICABLE-METHOD signal.

The work around is obvious. I'll get the gadgetmeisters figure out the correct
solution.

A test case is below.

Paul
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(in-package :clim-user)

(define-application-frame testme ()
((tfg))
(:panes
(p0 :application
:display-function
(lambda (f p)
(with-slots (tfg) f
(with-output-as-gadget (p :cache-value t)
(with-look-and-feel-realization ((frame-manager f) f)
(setq tfg (make-pane 'text-field :width 40))))
(setf (gadget-value tfg) "XXX")))))
(:layouts
(default p0)))

(defun testme ()
(run-frame-top-level
(make-application-frame 'testme)))




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise