X-Git-Url: https://git.distorted.org.uk/~mdw/clg/blobdiff_plain/57e4839d54020363a38e0872abefafc63697beeb..8f49b7a10a9717890ca98dff2b01799b80ce2761:/gdk/gdkevents.lisp diff --git a/gdk/gdkevents.lisp b/gdk/gdkevents.lisp index 3d7331a..aadfb2a 100644 --- a/gdk/gdkevents.lisp +++ b/gdk/gdkevents.lisp @@ -20,7 +20,7 @@ ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -;; $Id: gdkevents.lisp,v 1.12 2006-04-26 09:20:20 espen Exp $ +;; $Id: gdkevents.lisp,v 1.15 2008-03-18 15:08:08 espen Exp $ (in-package "GDK") @@ -47,7 +47,9 @@ (let ((reader (reader-function 'event-type))) (defun %event-class (location) - (gethash (funcall reader location 0) *event-classes*))) + (or + (gethash (funcall reader location 0) *event-classes*) + (error "No class defined for event type: ~S" (funcall reader location 0))))) (defmethod make-proxy-instance :around ((class event-class) location &rest initargs) @@ -75,14 +77,13 @@ :type (bool 8))) (:metaclass boxed-class))) -(defmethod initialize-instance ((event event) &rest initargs) +(defmethod initialize-instance :after ((event event) &rest initargs) (declare (ignore initargs)) - (call-next-method) (setf (slot-value event '%type) (event-class-type (class-of event)))) -(defmethod make-proxy-instance :around ((class (eql (find-class 'event))) location &rest initargs) +(defmethod make-proxy-instance ((class (eql (find-class 'event))) location &rest initargs) (let ((class (%event-class location))) - (apply #'call-next-method class location initargs))) + (apply #'make-proxy-instance class location initargs))) (defclass timed-event (event) @@ -560,3 +561,21 @@ (:metaclass event-class) (:event-type :owner-change)) +(defclass grab-broken-event (event) + ((keyboard + :allocation :alien + :accessor event-keyboard + :initarg :keyboard + :type boolean) + (implicit + :allocation :alien + :accessor event-implicit + :initarg :implicit + :type boolean) + (grab-window + :allocation :alien + :accessor event-grab-window + :initarg :grab-window + :type window)) + (:metaclass event-class) + (:event-type :grab-broken))