Attempt to implement mouse enter/leave handling in X11 (untested)

slava 2006-06-03 05:53:34 +00:00
parent 291f79b412
commit 48e76e5957
5 changed files with 19 additions and 8 deletions

View File

@ -6,6 +6,7 @@
- x11 title bars are funny
- x11 mouse enter/leave events: update rollover
- x11: when starting with restored windows, caret invisible
+ httpd:
- outliners don't work
- browser responder doesn't work

View File

@ -92,6 +92,13 @@ V{ } clone hand-buttons set-global
fire-motion
T{ mouse-enter } swap each-gesture ;
: forget-rollover ( -- )
#! After we restore the UI, send mouse leave events to all
#! gadgets that were under the mouse at the time of the
#! save, since the mouse is in a different location now.
f hand-gadget [ get-global ] 2keep set-global
parents hand-gestures ;
: focus-gestures ( new old -- )
drop-prefix <reversed>
T{ lose-focus } swap each-gesture

View File

@ -83,18 +83,11 @@ C: titled-gadget ( gadget title -- )
: open-titled-window ( gadget title -- )
<titled-gadget> open-window ;
: fix-rollover ( -- )
#! After we restore the UI, send mouse leave events to all
#! gadgets that were under the mouse at the time of the
#! save, since the mouse is in a different location now.
f hand-gadget [ get-global ] 2keep set-global
parents hand-gestures ;
: restore-windows ( -- )
windows get [ second ] map
0 windows get set-length
[ dup reset-world open-window* ] each
fix-rollover ;
forget-rollover ;
: restore-windows? ( -- ? )
windows get [ empty? not ] [ f ] if* ;

View File

@ -12,6 +12,10 @@ 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 -- )
@ -52,6 +56,8 @@ GENERIC: client-event ( event window -- )
{ [ dup ConfigureNotify = ] [ drop configure-event ] }
{ [ dup ButtonPress = ] [ drop button-down-event$ ] }
{ [ dup ButtonRelease = ] [ drop button-up-event$ ] }
{ [ dup EnterNotify = ] [ drop enter-event ] }
{ [ dup LeaveNotify = ] [ drop leave-event ] }
{ [ dup MotionNotify = ] [ drop motion-event ] }
{ [ dup KeyPress = ] [ drop key-down-event ] }
{ [ dup KeyRelease = ] [ drop key-up-event ] }

View File

@ -37,6 +37,10 @@ M: world button-up-event ( event world -- )
M: world wheel-event ( event world -- )
>r button&loc >r 4 = r> r> send-wheel ;
M: world enter-event ( event world -- ) motion-event ;
M: world leave-event ( event world -- ) 2drop forget-rollover ;
M: world motion-event ( event world -- )
>r dup XMotionEvent-x swap XMotionEvent-y 0 3array r>
move-hand ;