At Mon, 28 Mar 2016 11:53:38 -0700, Byron Davies wrote:
> I have a single interactive pasteboard on a slideshow slide.  For a learning 
> task, the user needs to click on objects on the pasteboard.  There’s a little 
> glitch, however.  The user must first click on the pasteboard to make it the 
> focus, and then click on the objects.  Is there a way to make the pasteboard 
> become the focus when the mouse moves into it?

You should be able to use the `focus` method on the canvas after its
frame is shown (via `on-superwindow-show`) or when a mouse event is
received (via `on-event`). See below for an example.

But I see that `focus` doesn't work right for a canvas in a floating
frame, like the one used by `interactive`, so the example below doesn't
work with the current release or snapshot. I've pushed a repair to
`focus` for the next snapshot build. I don't have a workaround for the
current version, but I might be able to find one if that's needed.

----------------------------------------

#lang slideshow
(require racket/gui/base)

(define (make-pasteboard f)
  (define c%
    (class editor-canvas%
      (super-new)
      (inherit focus)
      (define/override (on-superwindow-show on?)
        (when on?
          (focus))
        (super on-superwindow-show on?))))
  (define pb (new pasteboard%))
  (send pb insert-box) ; to demonstrate focus
  (new c% [parent f] [editor pb])
  void)

(slide)

(slide
 #:title "Example"
 (interactive (blank 500 500)
              make-pasteboard))

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to