summaryrefslogtreecommitdiff
path: root/core.lisp
diff options
context:
space:
mode:
authorBen Spencer <dangerous.ben@gmail.com>2010-12-28 14:17:09 +0000
committerBen Spencer <dangerous.ben@gmail.com>2010-12-28 14:17:09 +0000
commit61c170be843b2dc94016d3e086ef15a504263d35 (patch)
tree87d0de4b73e276dff3f9a104475ff726b3b02b47 /core.lisp
parent5f81f05a229072033056ffa7979099193ec553d3 (diff)
Implement send-fake-click using XTEST where available.
Diffstat (limited to 'core.lisp')
-rw-r--r--core.lisp42
1 files changed, 22 insertions, 20 deletions
diff --git a/core.lisp b/core.lisp
index 1d48fe8..00b9bb6 100644
--- a/core.lisp
+++ b/core.lisp
@@ -71,26 +71,28 @@
(defun send-fake-click (win button)
"Send a fake click (button press + button release) to win."
- ;; I don't know why this doesn't work. Sadly CLX doesn't have the
- ;; XTest extension like xlib does. With it this would be 2 lines.
- (multiple-value-bind (x y) (xlib:query-pointer (window-xwin win))
- (multiple-value-bind (rx ry) (xlib:query-pointer (screen-root (window-screen win)))
- (xlib:send-event (window-xwin win) :button-press (xlib:make-event-mask :button-press)
- :display *display*
- :root (screen-root (window-screen win))
- :window (window-xwin win) :event-window (window-xwin win)
- :code button
- :state 0
- :x x :y y :root-x rx :root-y ry
- :same-screen-p t)
- (xlib:send-event (window-xwin win) :button-release (xlib:make-event-mask :button-release)
- :display *display*
- :root (screen-root (window-screen win))
- :window (window-xwin win) :event-window (window-xwin win)
- :code button
- :state #x100
- :x x :y y :root-x rx :root-y ry
- :same-screen-p t))))
+ (if (find-package :xtest)
+ (progn
+ (xtest:fake-button-event *display* button t)
+ (xtest:fake-button-event *display* button nil))
+ (multiple-value-bind (x y) (xlib:query-pointer (window-xwin win))
+ (multiple-value-bind (rx ry) (xlib:query-pointer (screen-root (window-screen win)))
+ (xlib:send-event (window-xwin win) :button-press (xlib:make-event-mask :button-press)
+ :display *display*
+ :root (screen-root (window-screen win))
+ :window (window-xwin win) :event-window (window-xwin win)
+ :code button
+ :state 0
+ :x x :y y :root-x rx :root-y ry
+ :same-screen-p t)
+ (xlib:send-event (window-xwin win) :button-release (xlib:make-event-mask :button-release)
+ :display *display*
+ :root (screen-root (window-screen win))
+ :window (window-xwin win) :event-window (window-xwin win)
+ :code button
+ :state #x100
+ :x x :y y :root-x rx :root-y ry
+ :same-screen-p t)))))
;;; Pointer helper functions