]> git.eshelyaron.com Git - emacs.git/commitdiff
* mwheel.el (mwheel-installed-bindings): New var.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 12 Sep 2009 04:38:03 +0000 (04:38 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 12 Sep 2009 04:38:03 +0000 (04:38 +0000)
(mouse-wheel-mode): Use it, so as to make sure we really remove all
the bindings we set last time.  Use custom-initialize-delay.
* loadup.el: Load mwheel after term/*-win.el.
* startup.el (command-line): Don't reevaluate mouse-wheel-down-event
and mouse-wheel-up-event now that their first evaluation is done
sufficiently late to be correct.

lisp/ChangeLog
lisp/loadup.el
lisp/mwheel.el
lisp/startup.el

index ac9426aebe77cae9ff2658183ae3ac62cbe22cf8..9bd63cf99aaff7c5fdf09c71026066d58a3ac62a 100644 (file)
@@ -1,5 +1,13 @@
 2009-09-12  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * mwheel.el (mwheel-installed-bindings): New var.
+       (mouse-wheel-mode): Use it, so as to make sure we really remove all
+       the bindings we set last time.  Use custom-initialize-delay.
+       * loadup.el: Load mwheel after term/*-win.el.
+       * startup.el (command-line): Don't reevaluate mouse-wheel-down-event
+       and mouse-wheel-up-event now that their first evaluation is done
+       sufficiently late to be correct.
+
        * startup.el (tutorial-directory): Make it a defcustom.
        Use custom-initialize-delay rather than eval-at-startup to set it.
        * image.el (image-load-path): Make it a defcustom.
index 8fd2eb9073653eb3f67e65dd3afb0f0e1005a980..da7613bee251a0e73d4106b0ecfcec1ff3e788f6 100644 (file)
       (load "image")
       (load "international/fontset")
       (load "dnd")
-      (load "mwheel")
       (load "tool-bar")))
 (if (featurep 'x)
     (progn
     (progn
       (load "emacs-lisp/easymenu")  ;; for platform-related menu adjustments
       (load "term/ns-win")))
+(if (fboundp 'x-create-frame)
+    ;; Do it after loading term/foo-win.el since the value of the
+    ;; mouse-wheel-*-event vars depends on those files being loaded or not.
+    (load "mwheel"))
 (if (fboundp 'atan)    ; preload some constants and
     (progn             ; floating pt. functions if we have float support.
       (load "emacs-lisp/float-sup")))
index 37980279a28d54c9c21fbe5319b59f95a6013e7f..d457679d4f2db7cba325fe17c158a35ea9a8c2d8 100644 (file)
 ;; new button is bound to mwheel-scroll.
 
 (defun mouse-wheel-change-button (var button)
-  (let ((active mouse-wheel-mode))
-    ;; Deactivate before changing the setting.
-    (when active (mouse-wheel-mode -1))
-    (set-default var button)
-    (when active (mouse-wheel-mode 1))))
+  (set-default var button)
+  ;; Sync the bindings.
+  (when mouse-wheel-mode (mouse-wheel-mode 1)))
 
 (defvar mouse-wheel-down-button 4)
 (make-obsolete-variable 'mouse-wheel-down-button
@@ -239,32 +237,33 @@ This should only be bound to mouse buttons 4 and 5."
          (run-with-timer mouse-wheel-inhibit-click-time nil
                          'mwheel-inhibit-click-timeout))))
 
+(defvar mwheel-installed-bindings nil)
+
 ;;;###autoload
 (define-minor-mode mouse-wheel-mode
   "Toggle mouse wheel support.
 With prefix argument ARG, turn on if positive, otherwise off.
 Return non-nil if the new state is enabled."
+  :init-value t
+  ;; We'd like to use custom-initialize-set here so the setup is done
+  ;; before dumping, but at the point where the defcustom is evaluated,
+  ;; the corresponding function isn't defined yet, so
+  ;; custom-initialize-set signals an error.
+  :initialize 'custom-initialize-delay
   :global t
   :group 'mouse
-  (let* ((dn mouse-wheel-down-event)
-         (up mouse-wheel-up-event)
-         (keys
-          (nconc (mapcar (lambda (amt) `[(,@(if (consp amt) (car amt)) ,up)])
-                        mouse-wheel-scroll-amount)
-                 (mapcar (lambda (amt) `[(,@(if (consp amt) (car amt)) ,dn)])
-                        mouse-wheel-scroll-amount))))
-    ;; This condition-case is here because Emacs 19 will throw an error
-    ;; if you try to define a key that it does not know about.  I for one
-    ;; prefer to just unconditionally do a mwheel-install in my .emacs, so
-    ;; that if the wheeled-mouse is there, it just works, and this way it
-    ;; doesn't yell at me if I'm on my laptop or another machine, etc.
-    (condition-case ()
-       (dolist (key keys)
-         (cond (mouse-wheel-mode
-                (global-set-key key 'mwheel-scroll))
-               ((eq (lookup-key (current-global-map) key) 'mwheel-scroll)
-                (global-unset-key key))))
-      (error nil))))
+  ;; Remove previous bindings, if any.
+  (while mwheel-installed-bindings
+    (let ((key (pop mwheel-installed-bindings)))
+      (when (eq (lookup-key (current-global-map) key) 'mwheel-scroll)
+        (global-unset-key key))))
+  ;; Setup bindings as needed.
+  (when mouse-wheel-mode
+    (dolist (event (list mouse-wheel-down-event mouse-wheel-up-event))
+      (dolist (key (mapcar (lambda (amt) `[(,@(if (consp amt) (car amt)) ,event)])
+                           mouse-wheel-scroll-amount))
+        (global-set-key key 'mwheel-scroll)
+        (push key mwheel-installed-bindings)))))
 
 ;;; Compatibility entry point
 ;;;###autoload
index 5d5f23e4453fee008a76d3eb601075af42c8d237..d5133290ba828b46e4f0d9c31094f2e8e5a2acaa 100644 (file)
@@ -920,8 +920,6 @@ opening the first frame (e.g. open a connection to an X server).")
   (custom-reevaluate-setting 'blink-cursor-mode)
   (custom-reevaluate-setting 'tooltip-mode)
   (custom-reevaluate-setting 'global-font-lock-mode)
-  (custom-reevaluate-setting 'mouse-wheel-down-event)
-  (custom-reevaluate-setting 'mouse-wheel-up-event)
   (custom-reevaluate-setting 'file-name-shadow-mode)
   (custom-reevaluate-setting 'send-mail-function)
   (custom-reevaluate-setting 'focus-follows-mouse)