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.7 2005-02-26 10:44:09 espen Exp $
23 (define-flags-type event-mask
45 (:all-events #x3FFFFE))
48 ;;;; Metaclass for event classes
50 (defvar *event-classes* (make-hash-table))
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)
61 (defmethod shared-initialize ((class event-class) names &key name type)
63 (setf (slot-value class 'event-type) (first type))
64 (setf (gethash (first type) *event-classes*) class)
65 (let ((class-name (or name (class-name class))))
66 (register-type class-name 'event)))
68 (let ((reader (reader-function 'event-type)))
69 (defun %event-class (location)
70 (gethash (funcall reader location 0) *event-classes*)))
72 (defmethod ensure-proxy-instance ((class event-class) location)
73 (declare (ignore class))
74 (let ((class (%event-class location)))
75 (make-instance class :location location)))
80 (eval-when (:compile-toplevel :load-toplevel :execute)
81 (defclass event (boxed)
87 :accessor event-window
92 :accessor event-send-event
95 (:metaclass event-class)))
98 (defmethod initialize-instance ((event event) &rest initargs)
99 (declare (ignore initargs))
101 (setf (slot-value event '%type) (event-class-type (class-of event))))
104 (defclass timed-event (event)
109 :type (unsigned 32)))
110 (:metaclass event-class))
112 (defclass delete-event (event)
114 (:metaclass event-class)
118 (defclass destroy-event (event)
120 (:metaclass event-class)
123 (defclass expose-event (event)
136 :accessor event-width
141 :accessor event-height
146 :accessor event-region
151 :accessor event-count
154 (:metaclass event-class)
157 (defclass input-event (timed-event)
172 :type pointer) ;double-float)
175 :accessor event-state
177 :type modifier-type))
178 (:metaclass event-class))
181 (defclass motion-notify-event (input-event)
184 :accessor event-is-hint
186 :type (signed 16) ; should it be (boolean 16)?
191 :accessor event-device
196 :accessor event-root-x
201 :accessor event-root-y
204 (:metaclass event-class)
205 (:type :motion-notify))
207 (defclass button-event (input-event)
210 :accessor event-button
215 :accessor event-device
220 :accessor event-root-x
225 :accessor event-root-y
228 (:metaclass event-class))
230 (defclass button-press-event (button-event)
232 (:metaclass event-class)
233 (:type :button-press))
235 (defclass 2-button-press-event (button-press-event)
237 (:metaclass event-class)
238 (:type :2button-press))
240 (defclass 3-button-press-event (button-press-event)
242 (:metaclass event-class)
243 (:type :3button-press))
245 (defclass button-release-event (button-event)
247 (:metaclass event-class)
248 (:type :button-release))
251 (defclass key-event (timed-event)
254 :accessor event-state
259 :accessor event-keyval
264 :accessor event-length
269 :accessor event-string
274 :accessor event-hardware-keycode
275 :initarg :hardware-keycode
279 :accessor event-group
282 (:metaclass event-class))
284 (defclass key-press-event (key-event)
286 (:metaclass event-class)
289 (defclass key-release-event (key-event)
291 (:metaclass event-class)
292 (:type :key-release))
295 (defclass crossing-event (event)
298 :accessor event-subwindow
318 :accessor event-root-x
323 :accessor event-root-y
333 :accessor event-detail
338 :accessor event-focus
343 :accessor event-state
346 (:metaclass event-class))
349 (defclass enter-notify-event (crossing-event)
351 (:metaclass event-class)
352 (:type :enter-notify))
354 (defclass leave-notify-event (crossing-event)
356 (:metaclass event-class)
357 (:type :leave-notify))
359 (defclass focus-change-event (event)
365 (:metaclass event-class)
366 (:type :focus-change))
368 (defclass configure-event (event)
381 :accessor event-width
386 :accessor event-height
389 (:metaclass event-class)
392 (defclass map-event (event)
394 (:metaclass event-class)
397 (defclass unmap-event (event)
399 (:metaclass event-class)
402 (defclass property-notify-event (event)
404 (:metaclass event-class)
405 (:type :property-notify))
407 (defclass selection-clear-event (event)
409 (:metaclass event-class)
410 (:type :selection-clear))
412 (defclass selection-request-event (event)
414 (:metaclass event-class)
415 (:type :selection-request))
417 (defclass selection-notify-event (event)
419 (:metaclass event-class)
420 (:type :selection-notify))
422 (defclass dnd-event (event)
425 :accessor event-contex
435 :accessor event-x-root
440 :accessor event-y-root
443 (:metaclass event-class))
445 (defclass drag-enter-event (dnd-event)
447 (:metaclass event-class)
450 (defclass drag-leave-event (dnd-event)
452 (:metaclass event-class)
455 (defclass drag-motion-event (dnd-event)
457 (:metaclass event-class)
458 (:type :drag-motion))
460 (defclass drag-status-event (dnd-event)
462 (:metaclass event-class)
463 (:type :drag-status))
465 (defclass drot-start-event (dnd-event)
467 (:metaclass event-class)
470 (defclass drop-finished-event (dnd-event)
472 (:metaclass event-class)
473 (:type :drop-finished))
475 (defclass client-event (event)
477 (:metaclass event-class)
478 (:type :client-event))
480 (defclass visibility-notify-event (event)
483 :accessor event-state
485 :type visibility-state))
486 (:metaclass event-class)
487 (:type :visibility-notify))
489 (defclass no-expose-event (event)
491 (:metaclass event-class)
494 (defclass scroll-event (timed-event)
507 :accessor event-state
512 :accessor event-direction
514 :type scroll-direction)
517 :accessor event-root-x
522 :accessor event-root-y
525 (:metaclass event-class)
528 (defclass setting-event (event)
531 :accessor event-action
533 :type setting-action)
539 (:metaclass event-class)
542 (defclass proximity-event (timed-event)
545 :accessor event-device
548 (:metaclass event-class))
550 (defclass proximity-in-event (proximity-event)
552 (:metaclass event-class)
553 (:type :proximity-in))
555 (defclass proximity-out-event (proximity-event)
557 (:metaclass event-class)
558 (:type :proximity-out))
560 (defclass window-state-event (event)
563 :accessor event-change-mask
564 :initarg :change-mask
568 :accessor event-new-window-state
569 :initarg :new-window-state
571 (:metaclass event-class)
572 (:type :window-state))
574 (defclass owner-change-event (event)
576 (:metaclass event-class)
577 (:type :owner-change))