more consistent mouse events
original commit: 54bee6314efb966d5f3d863021f52fff5f1a9b69
This commit is contained in:
parent
771d383be6
commit
a9d6a3cb64
|
@ -129,12 +129,23 @@
|
||||||
(define/override (set-size x y w h)
|
(define/override (set-size x y w h)
|
||||||
(do-set-size x y w h))
|
(do-set-size x y w h))
|
||||||
|
|
||||||
|
(define tr 0)
|
||||||
|
|
||||||
(define/private (do-set-size x y w h)
|
(define/private (do-set-size x y w h)
|
||||||
(super set-size x y w h)
|
(super set-size x y w h)
|
||||||
|
(when tr
|
||||||
|
(tellv content-cocoa removeTrackingRect: #:type _NSInteger tr)
|
||||||
|
(set! tr #f))
|
||||||
(let ([sz (make-NSSize (- w (if vscroll? scroll-width 0))
|
(let ([sz (make-NSSize (- w (if vscroll? scroll-width 0))
|
||||||
(- h (if hscroll? scroll-width 0)))]
|
(- h (if hscroll? scroll-width 0)))]
|
||||||
[pos (make-NSPoint 0 (if hscroll? scroll-width 0))])
|
[pos (make-NSPoint 0 (if hscroll? scroll-width 0))])
|
||||||
(tellv content-cocoa setFrame: #:type _NSRect (make-NSRect pos sz)))
|
(tellv content-cocoa setFrame: #:type _NSRect (make-NSRect pos sz))
|
||||||
|
(set! tr (tell #:type _NSInteger
|
||||||
|
content-cocoa
|
||||||
|
addTrackingRect: #:type _NSRect (make-NSRect (make-NSPoint 0 0) sz)
|
||||||
|
owner: content-cocoa
|
||||||
|
userData: #f
|
||||||
|
assumeInside: #:type _BOOL #f)))
|
||||||
(when v-scroller
|
(when v-scroller
|
||||||
(tellv (scroller-cocoa v-scroller) setFrame: #:type _NSRect
|
(tellv (scroller-cocoa v-scroller) setFrame: #:type _NSRect
|
||||||
(make-NSRect
|
(make-NSRect
|
||||||
|
|
|
@ -110,6 +110,8 @@
|
||||||
(define cocoa (get-cocoa))
|
(define cocoa (get-cocoa))
|
||||||
(tellv cocoa setDelegate: cocoa)
|
(tellv cocoa setDelegate: cocoa)
|
||||||
|
|
||||||
|
(tellv cocoa setAcceptsMouseMovedEvents: #:type _BOOL #t)
|
||||||
|
|
||||||
(define/override (get-cocoa-content)
|
(define/override (get-cocoa-content)
|
||||||
(tell cocoa contentView))
|
(tell cocoa contentView))
|
||||||
(define/override (get-cocoa-window) cocoa)
|
(define/override (get-cocoa-window) cocoa)
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
(eq? et 'enter))
|
(eq? et 'enter))
|
||||||
|
|
||||||
(def/public (leaving?)
|
(def/public (leaving?)
|
||||||
(eq? et 'leaving))
|
(eq? et 'leave))
|
||||||
|
|
||||||
(def/public (moving?)
|
(def/public (moving?)
|
||||||
(and (eq? et 'motion)
|
(and (eq? et 'motion)
|
||||||
|
|
|
@ -153,7 +153,9 @@
|
||||||
GDK_BUTTON_PRESS_MASK
|
GDK_BUTTON_PRESS_MASK
|
||||||
GDK_BUTTON_RELEASE_MASK
|
GDK_BUTTON_RELEASE_MASK
|
||||||
GDK_POINTER_MOTION_MASK
|
GDK_POINTER_MOTION_MASK
|
||||||
GDK_FOCUS_CHANGE_MASK))
|
GDK_FOCUS_CHANGE_MASK
|
||||||
|
GDK_ENTER_NOTIFY_MASK
|
||||||
|
GDK_LEAVE_NOTIFY_MASK))
|
||||||
(set-gtk-object-flags! client-gtk (bitwise-ior (get-gtk-object-flags client-gtk)
|
(set-gtk-object-flags! client-gtk (bitwise-ior (get-gtk-object-flags client-gtk)
|
||||||
GTK_CAN_FOCUS))
|
GTK_CAN_FOCUS))
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,9 @@
|
||||||
_GdkEventKey _GdkEventKey-pointer
|
_GdkEventKey _GdkEventKey-pointer
|
||||||
(struct-out GdkEventKey)
|
(struct-out GdkEventKey)
|
||||||
_GdkEventMotion _GdkEventMotion-pointer
|
_GdkEventMotion _GdkEventMotion-pointer
|
||||||
(struct-out GdkEventMotion))
|
(struct-out GdkEventMotion)
|
||||||
|
_GdkEventCrossing _GdkEventCrossing-pointer
|
||||||
|
(struct-out GdkEventCrossing))
|
||||||
|
|
||||||
(define _GdkWindow (_cpointer/null 'GdkWindow))
|
(define _GdkWindow (_cpointer/null 'GdkWindow))
|
||||||
|
|
||||||
|
@ -71,3 +73,16 @@
|
||||||
[device _GdkDevice]
|
[device _GdkDevice]
|
||||||
[x_root _double]
|
[x_root _double]
|
||||||
[y_root _double]))
|
[y_root _double]))
|
||||||
|
|
||||||
|
(define-cstruct _GdkEventCrossing ([type _GdkEventType]
|
||||||
|
[window _GdkWindow]
|
||||||
|
[send_event _byte]
|
||||||
|
[time _uint32]
|
||||||
|
[x _double]
|
||||||
|
[y _double]
|
||||||
|
[x_root _double]
|
||||||
|
[y_root _double]
|
||||||
|
[mode _int]
|
||||||
|
[detail _int]
|
||||||
|
[focus _gboolean]
|
||||||
|
[state _uint]))
|
||||||
|
|
|
@ -105,39 +105,59 @@
|
||||||
(define-signal-handler connect-button-press "button-press-event"
|
(define-signal-handler connect-button-press "button-press-event"
|
||||||
(_fun _GtkWidget _GdkEventButton-pointer -> _gboolean)
|
(_fun _GtkWidget _GdkEventButton-pointer -> _gboolean)
|
||||||
(lambda (gtk event)
|
(lambda (gtk event)
|
||||||
(do-button-event gtk event #f)))
|
(do-button-event gtk event #f #f)))
|
||||||
|
|
||||||
(define-signal-handler connect-button-release "button-release-event"
|
(define-signal-handler connect-button-release "button-release-event"
|
||||||
(_fun _GtkWidget _GdkEventButton-pointer -> _gboolean)
|
(_fun _GtkWidget _GdkEventButton-pointer -> _gboolean)
|
||||||
(lambda (gtk event)
|
(lambda (gtk event)
|
||||||
(do-button-event gtk event #f)))
|
(do-button-event gtk event #f #f)))
|
||||||
|
|
||||||
(define-signal-handler connect-pointer-motion "motion-notify-event"
|
(define-signal-handler connect-pointer-motion "motion-notify-event"
|
||||||
(_fun _GtkWidget _GdkEventMotion-pointer -> _gboolean)
|
(_fun _GtkWidget _GdkEventMotion-pointer -> _gboolean)
|
||||||
(lambda (gtk event)
|
(lambda (gtk event)
|
||||||
(do-button-event gtk event #t)))
|
(do-button-event gtk event #t #f)))
|
||||||
|
|
||||||
|
(define-signal-handler connect-enter "enter-notify-event"
|
||||||
|
(_fun _GtkWidget _GdkEventCrossing-pointer -> _gboolean)
|
||||||
|
(lambda (gtk event)
|
||||||
|
(do-button-event gtk event #f #t)))
|
||||||
|
|
||||||
|
(define-signal-handler connect-leave "leave-notify-event"
|
||||||
|
(_fun _GtkWidget _GdkEventCrossing-pointer -> _gboolean)
|
||||||
|
(lambda (gtk event)
|
||||||
|
(do-button-event gtk event #f #t)))
|
||||||
|
|
||||||
(define (connect-key-and-mouse gtk)
|
(define (connect-key-and-mouse gtk)
|
||||||
(connect-key-press gtk)
|
(connect-key-press gtk)
|
||||||
(connect-button-press gtk)
|
(connect-button-press gtk)
|
||||||
(connect-button-release gtk)
|
(connect-button-release gtk)
|
||||||
(connect-pointer-motion gtk))
|
(connect-pointer-motion gtk)
|
||||||
|
(connect-enter gtk)
|
||||||
|
(connect-leave gtk))
|
||||||
|
|
||||||
(define (do-button-event gtk event motion?)
|
(define (do-button-event gtk event motion? crossing?)
|
||||||
(let ([type (if motion?
|
(let ([type (if motion?
|
||||||
GDK_MOTION_NOTIFY
|
GDK_MOTION_NOTIFY
|
||||||
(GdkEventButton-type event))])
|
(if crossing?
|
||||||
|
(GdkEventCrossing-type event)
|
||||||
|
(GdkEventButton-type event)))])
|
||||||
(unless (or (= type GDK_2BUTTON_PRESS)
|
(unless (or (= type GDK_2BUTTON_PRESS)
|
||||||
(= type GDK_3BUTTON_PRESS))
|
(= type GDK_3BUTTON_PRESS))
|
||||||
(let* ([wx (gtk->wx gtk)]
|
(let* ([wx (gtk->wx gtk)]
|
||||||
[modifiers (if motion?
|
[modifiers (if motion?
|
||||||
(GdkEventMotion-state event)
|
(GdkEventMotion-state event)
|
||||||
(GdkEventButton-state event))]
|
(if crossing?
|
||||||
|
(GdkEventCrossing-state event)
|
||||||
|
(GdkEventButton-state event)))]
|
||||||
[bit? (lambda (m v) (positive? (bitwise-and m v)))]
|
[bit? (lambda (m v) (positive? (bitwise-and m v)))]
|
||||||
[m (new mouse-event%
|
[m (new mouse-event%
|
||||||
[event-type (cond
|
[event-type (cond
|
||||||
[(= type GDK_MOTION_NOTIFY)
|
[(= type GDK_MOTION_NOTIFY)
|
||||||
'motion]
|
'motion]
|
||||||
|
[(= type GDK_ENTER_NOTIFY)
|
||||||
|
'enter]
|
||||||
|
[(= type GDK_LEAVE_NOTIFY)
|
||||||
|
'leave]
|
||||||
[(= type GDK_BUTTON_PRESS)
|
[(= type GDK_BUTTON_PRESS)
|
||||||
(case (GdkEventButton-button event)
|
(case (GdkEventButton-button event)
|
||||||
[(1) 'left-down]
|
[(1) 'left-down]
|
||||||
|
@ -151,13 +171,20 @@
|
||||||
[left-down (bit? modifiers GDK_BUTTON1_MASK)]
|
[left-down (bit? modifiers GDK_BUTTON1_MASK)]
|
||||||
[middle-down (bit? modifiers GDK_BUTTON2_MASK)]
|
[middle-down (bit? modifiers GDK_BUTTON2_MASK)]
|
||||||
[right-down (bit? modifiers GDK_BUTTON2_MASK)]
|
[right-down (bit? modifiers GDK_BUTTON2_MASK)]
|
||||||
[x (->long ((if motion? GdkEventMotion-x GdkEventButton-x) event))]
|
[x (->long ((if motion?
|
||||||
[y (->long ((if motion? GdkEventMotion-y GdkEventButton-y) event))]
|
GdkEventMotion-x
|
||||||
|
(if crossing? GdkEventCrossing-x GdkEventButton-x))
|
||||||
|
event))]
|
||||||
|
[y (->long ((if motion? GdkEventMotion-y
|
||||||
|
(if crossing? GdkEventCrossing-y GdkEventButton-y))
|
||||||
|
event))]
|
||||||
[shift-down (bit? modifiers GDK_SHIFT_MASK)]
|
[shift-down (bit? modifiers GDK_SHIFT_MASK)]
|
||||||
[control-down (bit? modifiers GDK_CONTROL_MASK)]
|
[control-down (bit? modifiers GDK_CONTROL_MASK)]
|
||||||
[meta-down (bit? modifiers GDK_META_MASK)]
|
[meta-down (bit? modifiers GDK_META_MASK)]
|
||||||
[alt-down (bit? modifiers GDK_MOD1_MASK)]
|
[alt-down (bit? modifiers GDK_MOD1_MASK)]
|
||||||
[time-stamp ((if motion? GdkEventMotion-time GdkEventButton-time) event)]
|
[time-stamp ((if motion? GdkEventMotion-time
|
||||||
|
(if crossing? GdkEventCrossing-time GdkEventButton-time))
|
||||||
|
event)]
|
||||||
[caps-down (bit? modifiers GDK_LOCK_MASK)])])
|
[caps-down (bit? modifiers GDK_LOCK_MASK)])])
|
||||||
(if (send wx handles-events?)
|
(if (send wx handles-events?)
|
||||||
(begin
|
(begin
|
||||||
|
|
Loading…
Reference in New Issue
Block a user