1 ;; Common Lisp bindings for GTK+ v2.0
2 ;; Copyright (C) 1999-2001 Espen S. Johnsen <esj@stud.cs.uit.no>
4 ;; This library is free software; you can redistribute it and/or
5 ;; modify it under the terms of the GNU Lesser General Public
6 ;; License as published by the Free Software Foundation; either
7 ;; version 2 of the License, or (at your option) any later version.
9 ;; This library is distributed in the hope that it will be useful,
10 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 ;; Lesser General Public License for more details.
14 ;; You should have received a copy of the GNU Lesser General Public
15 ;; License along with this library; if not, write to the Free Software
16 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 ;; $Id: gdkevents.lisp,v 1.5 2004/11/06 21:39:58 espen Exp $
23 (defvar *event-classes* (make-hash-table))
25 (eval-when (:compile-toplevel :load-toplevel :execute)
26 (defclass event (boxed)
32 :accessor event-window
37 :accessor event-send-event
40 (%align :allocation :alien :offset 2 :type (unsigned 8)))
41 (:metaclass boxed-class)))
44 (defmethod initialize-instance ((event event) &rest initargs)
45 (declare (ignore initargs))
47 (setf (slot-value event '%type) (event-class-type (class-of event))))
50 ;;;; Metaclass for event classes
52 (eval-when (:compile-toplevel :load-toplevel :execute)
53 (defclass event-class (boxed-class)
54 ((event-type :reader event-class-type)))
56 (defmethod validate-superclass ((class event-class) (super standard-class))
57 (subtypep (class-name super) 'event)))
60 (defmethod shared-initialize ((class event-class) names &key name type)
62 (setf (slot-value class 'event-type) (first type))
63 (setf (gethash (first type) *event-classes*) class)
64 (let ((class-name (or name (class-name class))))
65 (register-type class-name 'event)))
67 (let ((reader (reader-function 'event-type)))
68 (defun %event-class (location)
69 (gethash (funcall reader location 0) *event-classes*)))
71 (defmethod ensure-proxy-instance ((class event-class) location)
72 (declare (ignore class))
73 (let ((class (%event-class location)))
74 (make-instance class :location location)))
79 (defclass timed-event (event)
85 (:metaclass event-class))
87 (defclass delete-event (event)
89 (:metaclass event-class)
93 (defclass destroy-event (event)
95 (:metaclass event-class)
98 (defclass expose-event (event)
111 :accessor event-width
116 :accessor event-height
121 :accessor event-count
124 (:metaclass event-class)
127 (defclass motion-notify-event (timed-event)
140 :offset #.(size-of 'pointer)
141 :accessor event-state
146 :accessor event-is-hint
148 :type (signed 16) ; should it be (boolean 16)?
153 :accessor event-device
158 :accessor event-root-x
163 :accessor event-root-y
166 (:metaclass event-class)
167 (:type :motion-notify))
169 (defclass button-press-event (timed-event)
182 :offset #.(size-of 'pointer)
183 :accessor event-state
188 :accessor event-button
193 :accessor event-device
198 :accessor event-root-x
203 :accessor event-root-y
206 (:metaclass event-class)
207 (:type :button-press))
209 (defclass 2-button-press-event (button-press-event)
211 (:metaclass event-class)
212 (:type :2button-press))
214 (defclass 3-button-press-event (button-press-event)
216 (:metaclass event-class)
217 (:type :3button-press))
219 (defclass button-release-event (button-press-event)
221 (:metaclass event-class)
222 (:type :button-release))
224 (defclass key-press-event (event)
226 (:metaclass event-class)
229 (defclass key-release-event (event)
231 (:metaclass event-class)
232 (:type :key-release))
234 (defclass enter-notify-event (event)
236 (:metaclass event-class)
237 (:type :enter-notify))
239 (defclass leave-notify-event (event)
241 (:metaclass event-class)
242 (:type :leave-notify))
244 (defclass focus-change-event (event)
246 (:metaclass event-class)
247 (:type :focus-change))
249 (defclass configure-event (event)
262 :accessor event-width
267 :accessor event-height
270 (:metaclass event-class)
273 (defclass map-event (event)
275 (:metaclass event-class)
278 (defclass unmap-event (event)
280 (:metaclass event-class)
283 (defclass property-notify-event (event)
285 (:metaclass event-class)
286 (:type :property-notify))
288 (defclass selection-clear-event (event)
290 (:metaclass event-class)
291 (:type :selection-clear))
293 (defclass selection-request-event (event)
295 (:metaclass event-class)
296 (:type :selection-request))
298 (defclass selection-notify-event (event)
300 (:metaclass event-class)
301 (:type :selection-notify))
303 (defclass drag-enter-event (event)
305 (:metaclass event-class)
308 (defclass drag-leave-event (event)
310 (:metaclass event-class)
313 (defclass drag-motion-event (event)
315 (:metaclass event-class)
316 (:type :drag-motion))
318 (defclass drag-status-event (event)
320 (:metaclass event-class)
321 (:type :drag-status))
323 (defclass drag-start-event (event)
325 (:metaclass event-class)
328 (defclass drag-finished-event (event)
330 (:metaclass event-class)
331 (:type :drag-finished))
333 (defclass client-event (event)
335 (:metaclass event-class)
336 ;(:type :client-event)
339 (defclass visibility-notify-event (event)
342 :accessor event-state
344 :type visibility-state))
345 (:metaclass event-class)
346 (:type :visibility-notify))
348 (defclass no-expose-event (event)
350 (:metaclass event-class)
353 (defclass scroll-event (timed-event)
355 (:metaclass event-class)
358 (defclass setting-event (timed-event)
360 (:metaclass event-class)