Browse Source

Fix the frame selection problem without using a macro.

Do this by restauring the frame focus correctly in
`org-eval-in-calendar'.
Bastien Guerry 16 years ago
parent
commit
157329bb45
3 changed files with 81 additions and 82 deletions
  1. 5 0
      lisp/ChangeLog
  2. 1 0
      lisp/org-list.el
  3. 75 82
      lisp/org.el

+ 5 - 0
lisp/ChangeLog

@@ -1,3 +1,8 @@
+2009-07-25  Bastien Guerry  <bzg@altern.org>
+
+	* org.el (org-eval-in-calendar): Select the right frame.
+	(org-save-frame-excursion): Remove this macro.
+
 2009-07-24  Bastien Guerry  <bzg@altern.org>
 
 	* org-list.el (org-list-beginning-re): Bugfix: don't use * when

+ 1 - 0
lisp/org-list.el

@@ -1139,6 +1139,7 @@ this list."
   (catch 'exit
     (unless (org-at-item-p) (error "Not at a list"))
     (save-excursion
+      ;; bzg use org-list-find-true-beginning here?
       (goto-char (car (org-list-item-beginning)))
       (beginning-of-line 0)
       (unless (looking-at "#\\+ORGLST: *SEND +\\([a-zA-Z0-9_]+\\) +\\([^ \t\r\n]+\\)\\( +.*\\)?")

+ 75 - 82
lisp/org.el

@@ -12042,14 +12042,6 @@ So these are more for recording a certain time/date."
 (defvar org-read-date-history nil)
 (defvar org-read-date-final-answer nil)
 
-(defmacro org-save-frame-excursion (&rest body)
-  "Eval BODY and return to the currently selected frame."
-  (let ((frame-var (gensym "FRAME")))
-    `(let ((,frame-var (selected-frame)))
-       (unwind-protect
-           (progn ,@body)
-         (select-frame-set-input-focus ,frame-var)))))
-
 (defun org-read-date (&optional with-time to-time from-string prompt
 				default-time default-input)
   "Read a date, possibly a time, and make things smooth for the user.
@@ -12128,78 +12120,77 @@ user."
      (org-read-date-popup-calendar
       (save-excursion
 	(save-window-excursion
-	  (org-save-frame-excursion
-	   (calendar)
-	   (calendar-forward-day (- (time-to-days def)
-				    (calendar-absolute-from-gregorian
-				     (calendar-current-date))))
-	   (org-eval-in-calendar nil t)
-	   (let* ((old-map (current-local-map))
-		  (map (copy-keymap calendar-mode-map))
-		  (minibuffer-local-map (copy-keymap minibuffer-local-map)))
-	     (org-defkey map (kbd "RET") 'org-calendar-select)
-	     (org-defkey map (if (featurep 'xemacs) [button1] [mouse-1])
-			 'org-calendar-select-mouse)
-	     (org-defkey map (if (featurep 'xemacs) [button2] [mouse-2])
-			 'org-calendar-select-mouse)
-	     (org-defkey minibuffer-local-map [(meta shift left)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-backward-month 1))))
-	     (org-defkey minibuffer-local-map [(meta shift right)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-forward-month 1))))
-	     (org-defkey minibuffer-local-map [(meta shift up)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-backward-year 1))))
-	     (org-defkey minibuffer-local-map [(meta shift down)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-forward-year 1))))
-	     (org-defkey minibuffer-local-map [?\e (shift left)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-backward-month 1))))
-	     (org-defkey minibuffer-local-map [?\e (shift right)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-forward-month 1))))
-	     (org-defkey minibuffer-local-map [?\e (shift up)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-backward-year 1))))
-	     (org-defkey minibuffer-local-map [?\e (shift down)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-forward-year 1))))
-	     (org-defkey minibuffer-local-map [(shift up)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-backward-week 1))))
-	     (org-defkey minibuffer-local-map [(shift down)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-forward-week 1))))
-	     (org-defkey minibuffer-local-map [(shift left)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-backward-day 1))))
-	     (org-defkey minibuffer-local-map [(shift right)]
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(calendar-forward-day 1))))
-	     (org-defkey minibuffer-local-map ">"
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(scroll-calendar-left 1))))
-	     (org-defkey minibuffer-local-map "<"
-			 (lambda () (interactive)
-			   (org-eval-in-calendar '(scroll-calendar-right 1))))
-	     (run-hooks 'org-read-date-minibuffer-setup-hook)
-	     (unwind-protect
-		 (progn
-		   (use-local-map map)
-		   (add-hook 'post-command-hook 'org-read-date-display)
-		   (setq org-ans0 (read-string prompt default-input
-					       'org-read-date-history nil))
-		   ;; org-ans0: from prompt
-		   ;; org-ans1: from mouse click
-		   ;; org-ans2: from calendar motion
-		   (setq ans (concat org-ans0 " " (or org-ans1 org-ans2))))
-	       (remove-hook 'post-command-hook 'org-read-date-display)
-	       (use-local-map old-map)
-	       (when org-read-date-overlay
-		 (org-delete-overlay org-read-date-overlay)
-		 (setq org-read-date-overlay nil))))))))
+	  (calendar)
+	  (calendar-forward-day (- (time-to-days def)
+				   (calendar-absolute-from-gregorian
+				    (calendar-current-date))))
+	  (org-eval-in-calendar nil t)
+	  (let* ((old-map (current-local-map))
+		 (map (copy-keymap calendar-mode-map))
+		 (minibuffer-local-map (copy-keymap minibuffer-local-map)))
+	    (org-defkey map (kbd "RET") 'org-calendar-select)
+	    (org-defkey map (if (featurep 'xemacs) [button1] [mouse-1])
+			'org-calendar-select-mouse)
+	    (org-defkey map (if (featurep 'xemacs) [button2] [mouse-2])
+			'org-calendar-select-mouse)
+	    (org-defkey minibuffer-local-map [(meta shift left)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-backward-month 1))))
+	    (org-defkey minibuffer-local-map [(meta shift right)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-forward-month 1))))
+	    (org-defkey minibuffer-local-map [(meta shift up)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-backward-year 1))))
+	    (org-defkey minibuffer-local-map [(meta shift down)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-forward-year 1))))
+	    (org-defkey minibuffer-local-map [?\e (shift left)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-backward-month 1))))
+	    (org-defkey minibuffer-local-map [?\e (shift right)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-forward-month 1))))
+	    (org-defkey minibuffer-local-map [?\e (shift up)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-backward-year 1))))
+	    (org-defkey minibuffer-local-map [?\e (shift down)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-forward-year 1))))
+	    (org-defkey minibuffer-local-map [(shift up)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-backward-week 1))))
+	    (org-defkey minibuffer-local-map [(shift down)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-forward-week 1))))
+	    (org-defkey minibuffer-local-map [(shift left)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-backward-day 1))))
+	    (org-defkey minibuffer-local-map [(shift right)]
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(calendar-forward-day 1))))
+	    (org-defkey minibuffer-local-map ">"
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(scroll-calendar-left 1))))
+	    (org-defkey minibuffer-local-map "<"
+			(lambda () (interactive)
+			  (org-eval-in-calendar '(scroll-calendar-right 1))))
+	    (run-hooks 'org-read-date-minibuffer-setup-hook)
+	    (unwind-protect
+		(progn
+		  (use-local-map map)
+		  (add-hook 'post-command-hook 'org-read-date-display)
+		  (setq org-ans0 (read-string prompt default-input
+					      'org-read-date-history nil))
+		  ;; org-ans0: from prompt
+		  ;; org-ans1: from mouse click
+		  ;; org-ans2: from calendar motion
+		  (setq ans (concat org-ans0 " " (or org-ans1 org-ans2))))
+	      (remove-hook 'post-command-hook 'org-read-date-display)
+	      (use-local-map old-map)
+	      (when org-read-date-overlay
+		(org-delete-overlay org-read-date-overlay)
+		(setq org-read-date-overlay nil)))))))
      
      (t ; Naked prompt only
       (unwind-protect
@@ -12429,7 +12420,8 @@ DEF-FLAG   is t when a double ++ or -- indicates shift relative to
 (defun org-eval-in-calendar (form &optional keepdate)
   "Eval FORM in the calendar window and return to current window.
 Also, store the cursor date in variable org-ans2."
-  (let ((sw (selected-window)))
+  (let ((sf (selected-frame))
+	(sw (selected-window)))
     (select-window (get-buffer-window "*Calendar*" t))
     (eval form)
     (when (and (not keepdate) (calendar-cursor-to-date))
@@ -12437,7 +12429,8 @@ Also, store the cursor date in variable org-ans2."
 	     (time (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date))))
 	(setq org-ans2 (format-time-string "%Y-%m-%d" time))))
     (org-move-overlay org-date-ovl (1- (point)) (1+ (point)) (current-buffer))
-    (select-window sw)))
+    (select-window sw)
+    (select-frame-set-input-focus sf)))
 
 (defun org-calendar-select ()
   "Return to `org-read-date' with the date currently selected.