Expose Qt mouse press callbacks

ober

cc28fd393b82625fcbe5af26866ff2461c5e6ccd

diff --git a/jerboa_qt_shim.c b/jerboa_qt_shim.c
index b876ed0..9efe72b 100644
--- a/jerboa_qt_shim.c
+++ b/jerboa_qt_shim.c
@@ -166,6 +166,10 @@ void jerboa_qt_install_key_handler_consuming(void* w, long callback_id) {
     if (chez_void_callback)
         qt_widget_install_key_handler_consuming(w, chez_void_callback, callback_id);
 }
+void jerboa_qt_install_mouse_handler(void* w, long callback_id) {
+    if (chez_void_callback)
+        qt_widget_install_mouse_handler(w, chez_void_callback, callback_id);
+}
 
 /* Scroll Area — no signals, just direct pass-through */
 
diff --git a/src/jerboa-qt/ffi.ss b/src/jerboa-qt/ffi.ss
index 0c6a294..5f27c02 100644
--- a/src/jerboa-qt/ffi.ss
+++ b/src/jerboa-qt/ffi.ss
@@ -215,8 +215,11 @@
     ffi-qt-splitter-set-collapsible ffi-qt-splitter-is-collapsible
     ffi-qt-splitter-set-orientation
 
-    ;; Keyboard Events
+    ;; Keyboard/Mouse Events
     ffi-qt-install-key-handler ffi-qt-install-key-handler-consuming
+    ffi-qt-install-mouse-handler
+    ffi-qt-last-mouse-x ffi-qt-last-mouse-y ffi-qt-last-mouse-button
+    ffi-qt-last-mouse-modifiers ffi-qt-last-mouse-widget
     ffi-qt-last-key-code ffi-qt-last-key-modifiers ffi-qt-last-key-text
     ffi-qt-last-key-autorepeat
 
@@ -1561,11 +1564,17 @@
   (define-qt-ffi ffi-qt-splitter-set-orientation "qt_splitter_set_orientation" (void* int) void)
 
   ;; -----------------------------------------------------------------------
-  ;; Keyboard Events
+  ;; Keyboard/Mouse Events
   ;; -----------------------------------------------------------------------
 
   (define-qt-ffi ffi-qt-install-key-handler "jerboa_qt_install_key_handler" (void* long) void)
   (define-qt-ffi ffi-qt-install-key-handler-consuming "jerboa_qt_install_key_handler_consuming" (void* long) void)
+  (define-qt-ffi ffi-qt-install-mouse-handler "jerboa_qt_install_mouse_handler" (void* long) void)
+  (define-qt-ffi ffi-qt-last-mouse-x "qt_last_mouse_x" () int)
+  (define-qt-ffi ffi-qt-last-mouse-y "qt_last_mouse_y" () int)
+  (define-qt-ffi ffi-qt-last-mouse-button "qt_last_mouse_button" () int)
+  (define-qt-ffi ffi-qt-last-mouse-modifiers "qt_last_mouse_modifiers" () int)
+  (define-qt-ffi ffi-qt-last-mouse-widget "qt_last_mouse_widget" () void*)
   (define-qt-ffi ffi-qt-last-key-code "qt_last_key_code" () int)
   (define-qt-ffi ffi-qt-last-key-modifiers "qt_last_key_modifiers" () int)
   (define-qt-ffi ffi-qt-last-key-text "qt_last_key_text" () string)
diff --git a/src/jerboa-qt/qt.ss b/src/jerboa-qt/qt.ss
index 7c2f001..777b17c 100644
--- a/src/jerboa-qt/qt.ss
+++ b/src/jerboa-qt/qt.ss
@@ -209,9 +209,11 @@
     qt-splitter-set-collapsible! qt-splitter-collapsible?
     qt-splitter-set-orientation!
 
-    ;; Keyboard Events
-    qt-on-key-press! qt-on-key-press-consuming!
+    ;; Keyboard/Mouse Events
+    qt-on-key-press! qt-on-key-press-consuming! qt-on-mouse-press!
     qt-last-key-code qt-last-key-modifiers qt-last-key-text qt-last-key-autorepeat?
+    qt-last-mouse-x qt-last-mouse-y qt-last-mouse-button
+    qt-last-mouse-modifiers qt-last-mouse-widget
 
     ;; Pixmap
     qt-pixmap-load qt-pixmap-width qt-pixmap-height
@@ -1687,7 +1689,7 @@
     (ffi-qt-splitter-set-orientation s orientation))
 
   ;; -----------------------------------------------------------------------
-  ;; Keyboard Events
+  ;; Keyboard/Mouse Events
   ;; -----------------------------------------------------------------------
 
   (def (qt-on-key-press! w handler)
@@ -1700,10 +1702,20 @@
       (ffi-qt-install-key-handler-consuming w id)
       (track-handler! w id)))
 
+  (def (qt-on-mouse-press! w handler)
+    (let ([id (register-void-handler! handler)])
+      (ffi-qt-install-mouse-handler w id)
+      (track-handler! w id)))
+
   (def (qt-last-key-code) (ffi-qt-last-key-code))
   (def (qt-last-key-modifiers) (ffi-qt-last-key-modifiers))
   (def (qt-last-key-text) (ffi-qt-last-key-text))
   (def (qt-last-key-autorepeat?) (not (zero? (ffi-qt-last-key-autorepeat))))
+  (def (qt-last-mouse-x) (ffi-qt-last-mouse-x))
+  (def (qt-last-mouse-y) (ffi-qt-last-mouse-y))
+  (def (qt-last-mouse-button) (ffi-qt-last-mouse-button))
+  (def (qt-last-mouse-modifiers) (ffi-qt-last-mouse-modifiers))
+  (def (qt-last-mouse-widget) (ffi-qt-last-mouse-widget))
 
   ;; -----------------------------------------------------------------------
   ;; Pixmap