From: Karsten Poeck
Subject: set-view-scroll-position
Date: 
Message-ID: <poeck-151193152132@wina65.informatik.uni-wuerzburg.de>
#|

I have some troubles with the redrawing when I  move dialog-items in
a view and call set-view-scroll-position afterwards. This can be best
demonstrated by the
follwing code. First call (create-window), wait and then call (create-bug
·@(0 20)) both in the listener.
The effekt is that Text 2 is shown two times in the window. I assume that
set-view-position
tries to erase the old text2 view, but this is effectly executed after the
scrolling is done.
Any clues? I tried some permutations of without-interrupts invalidate-view
and so on but had no luck.

It must be a timing problem since
(progn
  (create-window)
  (create-bug ·@(0 20))
  )
works fine

Karsten
|#


(proclaim '(special window scroller text1 text2))

(defun create-window ()
  (setq window (make-instance 'window
                 :view-size (make-point 120 120)
                 :view-subviews (list (setq scroller
                                            (make-instance 'view
;ccl::scroller
                                              :view-size (make-point 100
100)
                                              :view-subviews
                                              (list
                                               (setq text1
                                                     (make-instance
'static-text-dialog-item
                                                       :dialog-item-text
"Text 1"
                                                       :view-position
(make-point 10 40)))
                                               (setq text2
                                                     (make-instance
'static-text-dialog-item
                                                       :dialog-item-text
"Text 2"
                                                       :view-position
(make-point 10 60)))))))))
  )

(defun create-bug (position)
  (set-view-position text2 (make-point 10 80))
  (set-view-scroll-position scroller position)
  )
          
#|
(create-window)
(create-bug ·@(0 20))

(progn
  (create-window)
  (create-bug ·@(0 20))
  )
|#