<div dir="ltr">So obvious. Why I never thought of it, I don't know.<div><br></div><div>Clearly, I was stuck on wondering why there was no setter/getter for the callback field. Just one level of indirection...<br><div><br>
</div><div>Cheers,</div><div>Matt</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, Jan 4, 2014 at 5:55 PM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
It is trivial to switch the callback's behavior at run-time:<br>
<br>
#lang racket/gui<br>
<br>
(define f (new frame% [label "test for Matt"]))<br>
(define b (new button%<br>
               [label "hello world"]<br>
               [parent f]<br>
               [callback (lambda (b e) (indirect-callback b e))]))<br>
<br>
(define (cb1 b e)<br>
  (displayln "odd")<br>
  (set! indirect-callback (if (eq? indirect-callback cb1) cb2 cb1)))<br>
<br>
(define (cb2 b e)<br>
  (displayln "even")<br>
  (set! indirect-callback (if (eq? indirect-callback cb1) cb2 cb1)))<br>
<br>
(define indirect-callback cb1)<br>
<br>
(send f show #t)<br>
<div><div class="h5"><br>
<br>
On Jan 4, 2014, at 5:49 PM, Matt Jadud wrote:<br>
<br>
> Hi all,<br>
><br>
> I've wondered about this for a while, but never asked.<br>
><br>
> When I create a GUI widget, I attach a callback:<br>
><br>
> (define b (new button% [... ...] [callback (lambda (b e) ...)] ...))<br>
><br>
> Is it possible to attach a callback at runtime? The docs say "no," but I thought I'd ask regardless. Perhaps what I want to ask is "why?"<br>
><br>
> I can't remember, at this point, why I thought I needed this functionality... but, I've always wondered why I wasn't able to do this. (Perhaps I was wondering this as I was thinking about a Qt-ish slot/connection model... I don't know.)<br>

><br>
> Many thanks,<br>
> Matt<br>
><br>
</div></div>> ____________________<br>
>  Racket Users list:<br>
>  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
</blockquote></div><br></div>