diff options
author | Ben Spencer <dangerous.ben@gmail.com> | 2010-12-28 14:17:09 +0000 |
---|---|---|
committer | Ben Spencer <dangerous.ben@gmail.com> | 2010-12-28 14:17:09 +0000 |
commit | 61c170be843b2dc94016d3e086ef15a504263d35 (patch) | |
tree | 87d0de4b73e276dff3f9a104475ff726b3b02b47 /core.lisp | |
parent | 5f81f05a229072033056ffa7979099193ec553d3 (diff) |
Implement send-fake-click using XTEST where available.
Diffstat (limited to 'core.lisp')
-rw-r--r-- | core.lisp | 42 |
1 files changed, 22 insertions, 20 deletions
@@ -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 |