2007-09-20 18:09:08 -04:00
|
|
|
! Copyright (C) 2005, 2006 Eduardo Cavazos and Slava Pestov
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2009-08-30 23:55:19 -04:00
|
|
|
USING: accessors arrays classes.struct combinators kernel
|
|
|
|
math.order namespaces x11 x11.xlib ;
|
2007-09-20 18:09:08 -04:00
|
|
|
IN: x11.events
|
|
|
|
|
|
|
|
GENERIC: expose-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: configure-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: button-down-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: button-up-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: enter-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: leave-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: wheel-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: motion-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: key-down-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: key-up-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: focus-in-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: focus-out-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: selection-notify-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: selection-request-event ( event window -- )
|
|
|
|
|
|
|
|
GENERIC: client-event ( event window -- )
|
|
|
|
|
|
|
|
: next-event ( -- event )
|
2009-08-30 23:55:19 -04:00
|
|
|
dpy get XEvent <struct> [ XNextEvent drop ] keep ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: mask-event ( mask -- event )
|
2009-08-30 23:55:19 -04:00
|
|
|
[ dpy get ] dip XEvent <struct> [ XMaskEvent drop ] keep ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-12-15 21:34:57 -05:00
|
|
|
: events-queued ( mode -- n ) [ dpy get ] dip XEventsQueued ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-30 23:55:19 -04:00
|
|
|
: wheel? ( event -- ? ) button>> 4 7 between? ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: button-down-event$ ( event window -- )
|
|
|
|
over wheel? [ wheel-event ] [ button-down-event ] if ;
|
|
|
|
|
|
|
|
: button-up-event$ ( event window -- )
|
|
|
|
over wheel? [ 2drop ] [ button-up-event ] if ;
|
|
|
|
|
|
|
|
: handle-event ( event window -- )
|
2009-08-30 23:55:19 -04:00
|
|
|
over type>> {
|
|
|
|
{ Expose [ XExposeEvent>> expose-event ] }
|
|
|
|
{ ConfigureNotify [ XConfigureEvent>> configure-event ] }
|
|
|
|
{ ButtonPress [ XButtonEvent>> button-down-event$ ] }
|
|
|
|
{ ButtonRelease [ XButtonEvent>> button-up-event$ ] }
|
|
|
|
{ EnterNotify [ XCrossingEvent>> enter-event ] }
|
|
|
|
{ LeaveNotify [ XCrossingEvent>> leave-event ] }
|
|
|
|
{ MotionNotify [ XMotionEvent>> motion-event ] }
|
|
|
|
{ KeyPress [ XKeyEvent>> key-down-event ] }
|
|
|
|
{ KeyRelease [ XKeyEvent>> key-up-event ] }
|
|
|
|
{ FocusIn [ XFocusChangeEvent>> focus-in-event ] }
|
|
|
|
{ FocusOut [ XFocusChangeEvent>> focus-out-event ] }
|
|
|
|
{ SelectionNotify [ XSelectionEvent>> selection-notify-event ] }
|
|
|
|
{ SelectionRequest [ XSelectionRequestEvent>> selection-request-event ] }
|
|
|
|
{ ClientMessage [ XClientMessageEvent>> client-event ] }
|
2008-04-11 13:57:43 -04:00
|
|
|
[ 3drop ]
|
|
|
|
} case ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-30 23:55:19 -04:00
|
|
|
: event-loc ( event -- loc )
|
|
|
|
[ x>> ] [ y>> ] bi 2array ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2009-08-30 23:55:19 -04:00
|
|
|
: event-dim ( event -- dim )
|
|
|
|
[ width>> ] [ height>> ] bi 2array ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: close-box? ( event -- ? )
|
2009-08-30 23:55:19 -04:00
|
|
|
[ message_type>> "WM_PROTOCOLS" x-atom = ]
|
|
|
|
[ data0>> "WM_DELETE_WINDOW" x-atom = ]
|
2008-12-15 21:34:57 -05:00
|
|
|
bi and ;
|