[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Event troubles?
- To: nakamura@SOE.Berkeley.Edu (Mark Nakamura)
- Subject: Re: Event troubles?
- From: Bill St. Clair <bill>
- Date: Mon, 10 Sep 90 09:54:55 -0400
- Cc: info-macl@cambridge.apple.com
- In-reply-to: Your message of Mon, 10 Sep 90 00:30:36 -0700. <9009100730.AA17870@dewey.soe.berkeley.edu>
Date: Mon, 10 Sep 90 00:30:36 PDT
From: nakamura@SOE.Berkeley.Edu (Mark Nakamura)
Message-Id: <9009100730.AA17870@dewey.soe.berkeley.edu>
To: info-macl@cambridge.apple.com
Subject: Event troubles?
Am I losing my mind, or what is going on here?
I am having significant troubles getting the MACL window event handlers to
work. What am I doing wrong?
I boot 1.3.2.
;; I create a window.
(oneof *window*)
;; I try to modify the window-select-event-handler:
(defobfun (window-select-event-handler *window*) ()
(ed-beep))
;; Then nothing happens. This completely disables my ability to select
;; windows with the mouse. So I think, oh shit, better redefine it:
(defobfun (window-select-event-handler *window*) ()
(usual-window-select-event-handler))
;; And still window selection with the mouse fails to work. The only way
;; that I can get it to work again is by loading the traps and doing:
(defobfun (window-select-event-handler *window*) ()
(_SelectWindow :long <ptr to window>))
;; So, I try the same thing with the window-key-up-event-handler.
(defobfun (window-key-up-event-handler *window*) ()
(ed-beep))
;; NOTHING HAPPENS. No beep when keys come up in any windows.
What am I doing wrong, or what is wrong with 1.3.2? I _need_ to have
this functionality.
Mark
This happens to a lot of people when they first use object-lisp. To clarify
what's going on, I present a little example.
Suppose somewhere in the depths of your Lisp was the following code:
(defun foo (x)
(do-something-really-important x))
Then you redefine foo as follows:
(defun foo (x)
(format t "~&Hi Mom! FOO was just called with ~s.~%" x)
x)
Would you be surprised to see:
? (foo 1)
Hi Mom! FOO was just called with 1.
1
?
Instead of DO-SOMETHING-REALLY-IMPORTANT being called to do what it
needs to do?
This is exactly what's happenning. MACL has a
WINDOW-SELECT-EVENT-HANDLER function for *WINDOW* that takes care of
calling _WindowSelect (amongst other things) when you click on a
window. Your code is redefining it.
What you need to do is create your own class of window and define
object functions on it:
(defobject *my-window* *window*)
(defobfun (window-select-event-handler *my-window*) ()
(usual-window-select-event-handler)
(ed-beep)
Then you can say:
(oneof *my-window*)
And the window will beep whenever you select it.
Enjoy!
Bill