changeset 82150:0d322d300115

(calendar-scroll-left, calendar-scroll-right): Behave like mouse-scroll-calendar-* when used from the mouse.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 27 Jul 2007 06:23:45 +0000
parents 2914fd1abc3e
children 7b6bc42d5f2c
files lisp/ChangeLog lisp/calendar/cal-move.el
diffstat 2 files changed, 26 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Jul 27 06:15:40 2007 +0000
+++ b/lisp/ChangeLog	Fri Jul 27 06:23:45 2007 +0000
@@ -1,5 +1,8 @@
 2007-07-27  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* calendar/cal-move.el (calendar-scroll-left, calendar-scroll-right):
+	Behave like mouse-scroll-calendar-* when used from the mouse.
+
 	* calendar/cal-menu.el (cal-menu-scroll-menu)
 	(cal-menu-global-mouse-menu): Use new names.
 
--- a/lisp/calendar/cal-move.el	Fri Jul 27 06:15:40 2007 +0000
+++ b/lisp/calendar/cal-move.el	Fri Jul 27 06:23:45 2007 +0000
@@ -85,33 +85,37 @@
   (interactive "p")
   (calendar-forward-month (* -12 arg)))
 
-(defun calendar-scroll-left (&optional arg)
+(defun calendar-scroll-left (&optional arg event)
   "Scroll the displayed calendar left by ARG months.
 If ARG is negative the calendar is scrolled right.  Maintains the relative
 position of the cursor with respect to the calendar as well as possible."
-  (interactive "p")
+  (interactive (list (prefix-numeric-value current-prefix-arg)
+                     last-nonmenu-event))
   (unless arg (setq arg 1))
-  (calendar-cursor-to-nearest-date)
-  (let ((old-date (calendar-cursor-to-date))
-        (today (calendar-current-date)))
-    (if (/= arg 0)
-        (let ((month displayed-month)
-	      (year displayed-year))
-          (increment-calendar-month month year arg)
-	  (generate-calendar-window month year)
-          (calendar-cursor-to-visible-date
-           (cond
-            ((calendar-date-is-visible-p old-date) old-date)
-            ((calendar-date-is-visible-p today) today)
-            (t (list month 1 year)))))))
-  (run-hooks 'calendar-move-hook))
+  (save-selected-window
+    (select-window (posn-window (event-start event)))
+    (calendar-cursor-to-nearest-date)
+    (let ((old-date (calendar-cursor-to-date))
+          (today (calendar-current-date)))
+      (if (/= arg 0)
+          (let ((month displayed-month)
+                (year displayed-year))
+            (increment-calendar-month month year arg)
+            (generate-calendar-window month year)
+            (calendar-cursor-to-visible-date
+             (cond
+              ((calendar-date-is-visible-p old-date) old-date)
+              ((calendar-date-is-visible-p today) today)
+              (t (list month 1 year)))))))
+    (run-hooks 'calendar-move-hook)))
 
-(defun calendar-scroll-right (&optional arg)
+(defun calendar-scroll-right (&optional arg event)
   "Scroll the displayed calendar window right by ARG months.
 If ARG is negative the calendar is scrolled left.  Maintains the relative
 position of the cursor with respect to the calendar as well as possible."
-  (interactive "p")
-  (calendar-scroll-left (- (or arg 1))))
+  (interactive (list (prefix-numeric-value current-prefix-arg)
+                     last-nonmenu-event))
+  (calendar-scroll-left (- (or arg 1)) event))
 
 (defun calendar-scroll-left-three-months (arg)
   "Scroll the displayed calendar window left by 3*ARG months.