;;;* Last edited: May 27 00:21 1995 (sw)
;;; Hack up X mouse Behavior.

;;; Select Emacs window mouse is on, and move point to mouse position. 
;;; Return relative y (or nil)


(defun x-mouse-set-point-return-rel-y (arg)
  (let* ((relative-coordinate (x-mouse-select arg))
	 (rel-x (car relative-coordinate))
	 (rel-y (car (cdr relative-coordinate))))
    (if relative-coordinate
	(progn
	  (move-to-window-line rel-y)
	  (move-to-column (+ rel-x (current-column)))
	  rel-y)
	nil)))


;;; (defun x-mouse-move-point-go-bottom (arg)
;;;   (let ((y (x-mouse-set-point-return-rel-y arg)))
;;;     (if y 
;;; 	(eval-in-window (selected-window) (scroll-up (+ y (- 2 (window-height))))))))
;;; 
;;; 
;;; (defun x-mouse-move-point-go-top (arg)
;;;   (let ((y (x-mouse-set-point-return-rel-y arg)))
;;;     (if y 
;;; 	(eval-in-window (sele;;; cted-window) (scroll-up y)))))
;;; 

(defun x-mouse-move-point-go-bottom (arg)
  (let ((y (x-mouse-set-point-return-rel-y arg)))
    (if y 
	(scroll-up (+ y (- 2 (window-height)))))))


(defun x-mouse-move-point-go-top (arg)
  (let ((y (x-mouse-set-point-return-rel-y arg)))
    (if y 
	(scroll-up y))))



;;; can't use this from .emacs, maybe mouse-map isn't set up yet?

(defun hack-x-mouse (arg1 arg2)
  (message "hacking x mouse -- unhooking")
  (define-key mouse-map x-button-left 'x-mouse-move-point-go-bottom)
  (define-key mouse-map x-button-middle 'x-mouse-set-point)
  (define-key mouse-map x-button-right 'x-mouse-move-point-go-top)
  
  (x-mouse-set-point arg1)

  (setq x-process-mouse-hook nil))

(setq x-process-mouse-hook 'hack-x-mouse)




