1 |
;;; ediff-wind.el --- window manipulation utilities |
;;; ediff-wind.el --- window manipulation utilities |
2 |
|
|
3 |
;; Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. |
;; Copyright (C) 1994, 95, 96, 97, 2000, 01, 02 Free Software Foundation, Inc. |
4 |
|
|
5 |
;; Author: Michael Kifer <kifer@cs.sunysb.edu> |
;; Author: Michael Kifer <kifer@cs.stonybrook.edu> |
6 |
|
|
7 |
;; This file is part of GNU Emacs. |
;; This file is part of GNU Emacs. |
8 |
|
|
36 |
(defvar left-toolbar-width) |
(defvar left-toolbar-width) |
37 |
(defvar right-toolbar-width) |
(defvar right-toolbar-width) |
38 |
(defvar default-menubar) |
(defvar default-menubar) |
39 |
|
(defvar top-gutter) |
40 |
(defvar frame-icon-title-format) |
(defvar frame-icon-title-format) |
41 |
(defvar ediff-diff-status) |
(defvar ediff-diff-status) |
42 |
(defvar ediff-emacs-p) |
(defvar ediff-emacs-p) |
272 |
(beep 1)) |
(beep 1)) |
273 |
(message "Please click on Window %d " wind-number)) |
(message "Please click on Window %d " wind-number)) |
274 |
(ediff-read-event) ; discard event |
(ediff-read-event) ; discard event |
275 |
(setq wind (if ediff-xemacs-p |
(setq wind (ediff-cond-compile-for-xemacs-or-emacs |
276 |
(event-window event) |
(event-window event) ; xemacs |
277 |
(posn-window (event-start event)))) |
(posn-window (event-start event)) ; emacs |
278 |
|
) |
279 |
|
) |
280 |
)) |
)) |
281 |
|
|
282 |
|
|
283 |
;; Select the lowest window on the frame. |
;; Select the lowest window on the frame. |
284 |
(defun ediff-select-lowest-window () |
(defun ediff-select-lowest-window () |
285 |
(if ediff-xemacs-p |
(ediff-cond-compile-for-xemacs-or-emacs |
286 |
(select-window (frame-lowest-window)) |
(select-window (frame-lowest-window)) ; xemacs |
287 |
(let* ((lowest-window (selected-window)) |
;; emacs |
288 |
(bottom-edge (car (cdr (cdr (cdr (window-edges)))))) |
(let* ((lowest-window (selected-window)) |
289 |
(last-window (save-excursion |
(bottom-edge (car (cdr (cdr (cdr (window-edges)))))) |
290 |
(other-window -1) (selected-window))) |
(last-window (save-excursion |
291 |
(window-search t)) |
(other-window -1) (selected-window))) |
292 |
(while window-search |
(window-search t)) |
293 |
(let* ((this-window (next-window)) |
(while window-search |
294 |
(next-bottom-edge |
(let* ((this-window (next-window)) |
295 |
(car (cdr (cdr (cdr (window-edges this-window))))))) |
(next-bottom-edge |
296 |
(if (< bottom-edge next-bottom-edge) |
(car (cdr (cdr (cdr (window-edges this-window))))))) |
297 |
(progn |
(if (< bottom-edge next-bottom-edge) |
298 |
(setq bottom-edge next-bottom-edge) |
(progn |
299 |
(setq lowest-window this-window))) |
(setq bottom-edge next-bottom-edge) |
300 |
|
(setq lowest-window this-window))) |
301 |
(select-window this-window) |
|
302 |
(if (eq last-window this-window) |
(select-window this-window) |
303 |
(progn |
(if (eq last-window this-window) |
304 |
(select-window lowest-window) |
(progn |
305 |
(setq window-search nil)))))))) |
(select-window lowest-window) |
306 |
|
(setq window-search nil)))))) |
307 |
|
)) |
308 |
|
|
309 |
|
|
310 |
;;; Common window setup routines |
;;; Common window setup routines |
850 |
(ediff-frame-has-dedicated-windows (selected-frame)) |
(ediff-frame-has-dedicated-windows (selected-frame)) |
851 |
(ediff-frame-iconified-p (selected-frame)) |
(ediff-frame-iconified-p (selected-frame)) |
852 |
;; skip small windows |
;; skip small windows |
853 |
(< (window-height (selected-window)) |
(< (frame-height (selected-frame)) |
854 |
(* 3 window-min-height)) |
(* 3 window-min-height)) |
855 |
(if ok-unsplittable |
(if ok-unsplittable |
856 |
nil |
nil |
901 |
fheight fwidth adjusted-parameters) |
fheight fwidth adjusted-parameters) |
902 |
|
|
903 |
(ediff-with-current-buffer ctl-buffer |
(ediff-with-current-buffer ctl-buffer |
904 |
(if ediff-xemacs-p (set-buffer-menubar nil)) |
(ediff-cond-compile-for-xemacs-or-emacs |
905 |
|
(set-buffer-menubar nil) ; xemacs |
906 |
|
nil ; emacs |
907 |
|
) |
908 |
;;(setq user-grabbed-mouse (ediff-user-grabbed-mouse)) |
;;(setq user-grabbed-mouse (ediff-user-grabbed-mouse)) |
909 |
(run-hooks 'ediff-before-setup-control-frame-hook)) |
(run-hooks 'ediff-before-setup-control-frame-hook)) |
910 |
|
|
916 |
ediff-control-frame ctl-frame) |
ediff-control-frame ctl-frame) |
917 |
;; protect against undefined face-attribute |
;; protect against undefined face-attribute |
918 |
(condition-case nil |
(condition-case nil |
919 |
(when (and ediff-emacs-p (face-attribute 'mode-line :box)) |
(ediff-cond-compile-for-xemacs-or-emacs |
920 |
(set-face-attribute 'mode-line ctl-frame :box nil)) |
nil ; xemacs |
921 |
|
(when (face-attribute 'mode-line :box) |
922 |
|
(set-face-attribute 'mode-line ctl-frame :box nil)) |
923 |
|
) |
924 |
(error)) |
(error)) |
925 |
) |
) |
926 |
|
|
966 |
;; In XEmacs, buffer menubar needs to be killed before frame parameters |
;; In XEmacs, buffer menubar needs to be killed before frame parameters |
967 |
;; are changed. |
;; are changed. |
968 |
(if (ediff-has-toolbar-support-p) |
(if (ediff-has-toolbar-support-p) |
969 |
(progn |
(ediff-cond-compile-for-xemacs-or-emacs |
970 |
(set-specifier top-toolbar-height (list ctl-frame 2)) |
(progn ; xemacs |
971 |
(sit-for 0) |
(set-specifier top-toolbar-height (list ctl-frame 2)) |
972 |
(set-specifier top-toolbar-height (list ctl-frame 0)) |
(set-specifier top-gutter (list ctl-frame nil)) |
973 |
;;(set-specifier bottom-toolbar-height (list ctl-frame 0)) |
(sit-for 0) |
974 |
(set-specifier left-toolbar-width (list ctl-frame 0)) |
(set-specifier top-toolbar-height (list ctl-frame 0)) |
975 |
(set-specifier right-toolbar-width (list ctl-frame 0)) |
;;(set-specifier bottom-toolbar-height (list ctl-frame 0)) |
976 |
)) |
(set-specifier left-toolbar-width (list ctl-frame 0)) |
977 |
|
(set-specifier right-toolbar-width (list ctl-frame 0)) |
978 |
|
) |
979 |
|
nil ; emacs |
980 |
|
) |
981 |
|
) |
982 |
|
|
983 |
;; Under OS/2 (emx) we have to call modify frame parameters twice, in order |
;; Under OS/2 (emx) we have to call modify frame parameters twice, in order |
984 |
;; to make sure that at least once we do it for non-iconified frame. If |
;; to make sure that at least once we do it for non-iconified frame. If |
1034 |
|
|
1035 |
(if ediff-xemacs-p |
(if ediff-xemacs-p |
1036 |
(ediff-with-current-buffer ctl-buffer |
(ediff-with-current-buffer ctl-buffer |
1037 |
(if ediff-xemacs-p |
(ediff-cond-compile-for-xemacs-or-emacs |
1038 |
(make-local-hook 'select-frame-hook)) |
(make-local-hook 'select-frame-hook) ; xemacs |
1039 |
|
nil ; emacs |
1040 |
|
) |
1041 |
(add-hook |
(add-hook |
1042 |
'select-frame-hook 'ediff-xemacs-select-frame-hook nil 'local) |
'select-frame-hook 'ediff-xemacs-select-frame-hook nil 'local) |
1043 |
)) |
)) |
1051 |
(ediff-with-current-buffer ctl-buffer |
(ediff-with-current-buffer ctl-buffer |
1052 |
(if (and (ediff-window-display-p) (frame-live-p ediff-control-frame)) |
(if (and (ediff-window-display-p) (frame-live-p ediff-control-frame)) |
1053 |
(let ((ctl-frame ediff-control-frame)) |
(let ((ctl-frame ediff-control-frame)) |
1054 |
(if ediff-xemacs-p |
(ediff-cond-compile-for-xemacs-or-emacs |
1055 |
(set-buffer-menubar default-menubar)) |
(set-buffer-menubar default-menubar) ; xemacs |
1056 |
|
nil ; emacs |
1057 |
|
) |
1058 |
(setq ediff-control-frame nil) |
(setq ediff-control-frame nil) |
1059 |
(delete-frame ctl-frame) |
(delete-frame ctl-frame) |
1060 |
))) |
))) |