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.8 2005-02-26 17:55:27 espen Exp $
23 (define-flags-type event-mask
45 (:all-events #x3FFFFE))
47 (register-type 'event-mask "GdkEventMask")
50 ;;;; Metaclass for event classes
52 (defvar *event-classes* (make-hash-table))
54 (eval-when (:compile-toplevel :load-toplevel :execute)
55 (defclass event-class (boxed-class)
56 ((event-type :reader event-class-type)))
58 (defmethod validate-superclass ((class event-class) (super standard-class))
59 ;(subtypep (class-name super) 'event)
63 (defmethod shared-initialize ((class event-class) names &key name type)
65 (setf (slot-value class 'event-type) (first type))
66 (setf (gethash (first type) *event-classes*) class)
67 (let ((class-name (or name (class-name class))))
68 (register-type class-name 'event)))
70 (let ((reader (reader-function 'event-type)))
71 (defun %event-class (location)
72 (gethash (funcall reader location 0) *event-classes*)))
74 (defmethod ensure-proxy-instance ((class event-class) location)
75 (declare (ignore class))
76 (let ((class (%event-class location)))
77 (make-instance class :location location)))
82 (eval-when (:compile-toplevel :load-toplevel :execute)
83 (defclass event (boxed)
89 :accessor event-window
94 :accessor event-send-event
97 (:metaclass event-class)))
100 (defmethod initialize-instance ((event event) &rest initargs)
101 (declare (ignore initargs))
103 (setf (slot-value event '%type) (event-class-type (class-of event))))
106 (defclass timed-event (event)
111 :type (unsigned 32)))
112 (:metaclass event-class))
114 (defclass delete-event (event)
116 (:metaclass event-class)
120 (defclass destroy-event (event)
122 (:metaclass event-class)
125 (defclass expose-event (event)
138 :accessor event-width
143 :accessor event-height
148 :accessor event-region
153 :accessor event-count
156 (:metaclass event-class)
159 (defclass input-event (timed-event)
174 :type pointer) ;double-float)
177 :accessor event-state
179 :type modifier-type))
180 (:metaclass event-class))
183 (defclass motion-notify-event (input-event)
186 :accessor event-is-hint
188 :type (signed 16) ; should it be (boolean 16)?
193 :accessor event-device
198 :accessor event-root-x
203 :accessor event-root-y
206 (:metaclass event-class)
207 (:type :motion-notify))
209 (defclass button-event (input-event)
212 :accessor event-button
217 :accessor event-device
222 :accessor event-root-x
227 :accessor event-root-y
230 (:metaclass event-class))
232 (defclass button-press-event (button-event)
234 (:metaclass event-class)
235 (:type :button-press))
237 (defclass 2-button-press-event (button-press-event)
239 (:metaclass event-class)
240 (:type :2button-press))
242 (defclass 3-button-press-event (button-press-event)
244 (:metaclass event-class)
245 (:type :3button-press))
247 (defclass button-release-event (button-event)
249 (:metaclass event-class)
250 (:type :button-release))
253 (defclass key-event (timed-event)
256 :accessor event-state
261 :accessor event-keyval
266 :accessor event-length
271 :accessor event-string
276 :accessor event-hardware-keycode
277 :initarg :hardware-keycode
281 :accessor event-group
284 (:metaclass event-class))
286 (defclass key-press-event (key-event)
288 (:metaclass event-class)
291 (defclass key-release-event (key-event)
293 (:metaclass event-class)
294 (:type :key-release))
297 (defclass crossing-event (event)
300 :accessor event-subwindow
320 :accessor event-root-x
325 :accessor event-root-y
335 :accessor event-detail
340 :accessor event-focus
345 :accessor event-state
348 (:metaclass event-class))
351 (defclass enter-notify-event (crossing-event)
353 (:metaclass event-class)
354 (:type :enter-notify))
356 (defclass leave-notify-event (crossing-event)
358 (:metaclass event-class)
359 (:type :leave-notify))
361 (defclass focus-change-event (event)
367 (:metaclass event-class)
368 (:type :focus-change))
370 (defclass configure-event (event)
383 :accessor event-width
388 :accessor event-height
391 (:metaclass event-class)
394 (defclass map-event (event)
396 (:metaclass event-class)
399 (defclass unmap-event (event)
401 (:metaclass event-class)
404 (defclass property-notify-event (event)
406 (:metaclass event-class)
407 (:type :property-notify))
409 (defclass selection-clear-event (event)
411 (:metaclass event-class)
412 (:type :selection-clear))
414 (defclass selection-request-event (event)
416 (:metaclass event-class)
417 (:type :selection-request))
419 (defclass selection-notify-event (event)
421 (:metaclass event-class)
422 (:type :selection-notify))
424 (defclass dnd-event (event)
427 :accessor event-contex
437 :accessor event-x-root
442 :accessor event-y-root
445 (:metaclass event-class))
447 (defclass drag-enter-event (dnd-event)
449 (:metaclass event-class)
452 (defclass drag-leave-event (dnd-event)
454 (:metaclass event-class)
457 (defclass drag-motion-event (dnd-event)
459 (:metaclass event-class)
460 (:type :drag-motion))
462 (defclass drag-status-event (dnd-event)
464 (:metaclass event-class)
465 (:type :drag-status))
467 (defclass drot-start-event (dnd-event)
469 (:metaclass event-class)
472 (defclass drop-finished-event (dnd-event)
474 (:metaclass event-class)
475 (:type :drop-finished))
477 (defclass client-event (event)
479 (:metaclass event-class)
480 (:type :client-event))
482 (defclass visibility-notify-event (event)
485 :accessor event-state
487 :type visibility-state))
488 (:metaclass event-class)
489 (:type :visibility-notify))
491 (defclass no-expose-event (event)
493 (:metaclass event-class)
496 (defclass scroll-event (timed-event)
509 :accessor event-state
514 :accessor event-direction
516 :type scroll-direction)
519 :accessor event-root-x
524 :accessor event-root-y
527 (:metaclass event-class)
530 (defclass setting-event (event)
533 :accessor event-action
535 :type setting-action)
541 (:metaclass event-class)
544 (defclass proximity-event (timed-event)
547 :accessor event-device
550 (:metaclass event-class))
552 (defclass proximity-in-event (proximity-event)
554 (:metaclass event-class)
555 (:type :proximity-in))
557 (defclass proximity-out-event (proximity-event)
559 (:metaclass event-class)
560 (:type :proximity-out))
562 (defclass window-state-event (event)
565 :accessor event-change-mask
566 :initarg :change-mask
570 :accessor event-new-window-state
571 :initarg :new-window-state
573 (:metaclass event-class)
574 (:type :window-state))
576 (defclass owner-change-event (event)
578 (:metaclass event-class)
579 (:type :owner-change))