Generic_Window_Manager/data/mwm-placements.gwm

118 lines
3.3 KiB
Plaintext

;;File: mwm-placements.gwm -- functions to automatically place mwm windows on screen
;;Author: colas@mirsa.inria.fr (Colas NAHABOO) -- Bull Research FRANCE
;;Author: Frederic CHARTON
;;Author: Glen WHITNEY
;;Revision: 1.1 -- June 26 1989
;;Revision: "Mapping closed windows" bug fixed -- 30 November 1992
;;State: Exp
;;GWM Version: 1.7l
; PLACEMENTS
; ==========
(df place-window-in-screen ()
(with (x (window-x)
y (window-y)
xe (+ x (window-width))
ye (+ y (window-height)))
(if (< x 0) (move-window 0 y))
(if (< y 0) (move-window x 0))
(if (> xe screen-width) (move-window (- screen-width
(window-width)) y))
(if (> ye screen-height) (move-window x (- screen-height
(window-height))))))
(defun obscuring-something (windough)
(with (result nil window windough myx window-x myy window-y)
(for window (list-of-windows)
(if (and (not (= window windough))
(dist-below window-x window-y myx myy tooClose))
(: result t)))
result))
(defun dist-below (x1 y1 x2 y2 threshold)
(< (+ (square (- x2 x1)) (square (- y2 y1))) (square threshold)))
(defun square (num)
(* num num))
(de mwm-window-placement (flag)
(if flag
(progn
(if (and (not window-was-on-screen)
(not window-starts-iconic)
(not window-is-transient-for)
interactivePlacement
(not (and window-user-set-position
(= window-status 'window))))
(progn (: l (current-mouse-position))
(if (member 'placement showFeedback)
(progn
(meter-open-in-place)
(meter-update (+ "( " (itoa window-x) " , "
(itoa window-y) ") "
(itoa window-width) " x "
(itoa window-height)))))
(: x (# 0 l))
(: y (# 1 l))
(with (move-meter 1) (move-window x y))
(process-exposes)
(: new-window window)
(with (cursor place-cursor) (move-window))
(if (member 'placement showFeedback) (meter-close))
)
(progn ; else
; (if positionIsFrame
; (move-window (+ window-x window-client-x)
; (+ window-y window-client-y)))
(if positionOnScreen (place-window-in-screen))
(if clientAutoPlace
(with (oldx window-x oldy window-y try t)
(while (and (obscuring-something window) try)
(move-window (+ window-x clientAutoXOffset)
(+ window-y clientAutoYOffset))
(if positionOnScreen (place-window-in-screen))
(if (and (= window-x oldx) (= window-y oldy))
{(move-window 0 0) (: try ())})
(: oldx window-x)
(: oldy window-y)))))
)
(map-window))
))
(defun meter-open-in-place ()
(with (position (meter 'x 0 'y 0))
(meter-open (nth 1 position) (nth 3 position) " ")))
; Icon Placement :
; --------------
(defun mwm-icon-placement (flag)
(if iconAutoPlace
(if flag ; open new window
(if (member window (list-of-windows))
(with (thePlace (auto-get-place)
X (# 0 thePlace)
Y (# 1 thePlace)
)
(## 'X window X)
(## 'Y window Y)
(eval (+ '(move-window) (XY-to-xy X Y)))
(set-icon-of-array X Y window)
))
; close managed window
(with (X (# 'X window-property)
Y (# 'Y window-property)
)
(if X (set-icon-of-array X Y ()))
)
)
(with (window window-window)
(move-window window-icon (+ window-x window-client-x)
(+ window-y window-client-y))
)))