Generic_Window_Manager/data/mwm-win.gwm

929 lines
30 KiB
Plaintext

;;File: mwm-win.gwm -- mwm-like frame
;;Author: Frederic CHARTON
;;Revision: 1.1 -- Marc 2 1990
;;Updated by Anders Holst (aho@nada.kth.se) July 22 1995
(: mwm-ed-borderwidth 0)
; STANDARD BEHAVIOR OF WINDOWS :
; ============================
(: window-std-behavior
(state-make
(on focus-out (progn ;(? "focus leaving window " window-name "\n")
(maintain-focus-out)))
(on focus-in (progn ;(? "focus entering window " window-name "\n")
(maintain-focus-in)))
(on (user-event 'resize-by-menu)
(progn
(set-focus)
(warp-pointer (/ window-width 2) (/ window-height 2) window)
(with (cursor cross-cursor) (grab-server window 'only))
(: resize-flag window)))
(if (= keyboardFocusPolicy 'explicit)
(on leave-window
(if (not (current-event-from-grab))
(progn
(if (= resize-flag window)
(progn (: resize-flag ())
(ungrab-server)
(with (mwm-resize-style-catch-corners 1
old mwm-resize-style-corner-size)
(: mwm-resize-style-corner-size
(# 'resize-corner-size window))
(resize-window)
(: mwm-resize-style-corner-size old)
)
)
(send-user-event 'leave-window))
)
)
)
(on leave-window
(if (not (current-event-from-grab))
(progn
(if (= resize-flag window)
(progn (: resize-flag ())
(ungrab-server)
(with (mwm-resize-style-catch-corners 1
old mwm-resize-style-corner-size)
(: mwm-resize-style-corner-size
(# 'resize-corner-size window))
(resize-window)
(: mwm-resize-style-corner-size old)
)
)
)
(set-focus ())
)
(with (cmp (current-mouse-position)
cmpx (- (# 0 cmp) window-x) cmpy (- (# 1 cmp) window-y)
)
(if (not (and (> cmpx 0) (> cmpy 0)
(< cmpx window-width)
(< cmpy window-height)))
(set-focus ())
)
)
)
)
)
(if (= keyboardFocusPolicy 'explicit)
(on enter-window
(if (not (# 'got-focus window-property))
(set-grabs (replayable-event (buttonpress 1 alone)))
)
)
(on enter-window (set-focus))
)
(if (= keyboardFocusPolicy 'explicit)
(on (buttonpress 1 alone)
(if (not (# 'got-focus window-property))
(progn
(set-focus)
(if (not (= resize-flag window)) (: resize-flag ()))
(if passSelectButton
(ungrab-server-and-replay-event ())
(allow-event-processing))
(unset-grabs (buttonpress 1 alone) )
)
(progn ; has focus already, got this by mistake
(ungrab-server-and-replay-event ())
(unset-grabs (buttonpress 1 alone) )))
)
)
(on name-change (send-user-event 'name-change))
(on (property-change "WM_ICON_NAME")
(if (window-icon?)
(send-user-event 'name-change window-icon)))
(on window-icon-pixmap-change
(send-user-event 'icon-pixmap-change window-icon))
)
)
;-------------------------------------------------------------------------
; THE TILES :
; =========
(defun make-vbar-tile (size active spec)
(with (foreground (if active clientActiveBackground clientBackground)
theTile (pixmap-make size 1))
(with (foreground (if active clientActiveTopShadowColor
clientTopShadowColor))
(draw-line theTile 0 0 (if (eq spec 'right) 0 1) 0))
(with (foreground (if active clientActiveBottomShadowColor
clientBottomShadowColor))
(draw-line theTile (- size 1) 0 (- size (if (eq spec 'left) 1 2)) 0))
theTile
))
(defun make-hbar-tile (size active spec)
(with (foreground (if active clientActiveBackground clientBackground)
theTile (pixmap-make 1 size))
(with (foreground (if active clientActiveTopShadowColor
clientTopShadowColor))
(draw-line theTile 0 0 0 (if (eq spec 'title) 0 1)))
(with (foreground (if active clientActiveBottomShadowColor
clientBottomShadowColor))
(draw-line theTile 0 (- size 1) 0 (- size (if spec 1 2))))
theTile
))
(: shadowed-vbar-tile
(make-vbar-tile resizeBorderWidth () ()))
(: active-shadowed-vbar-tile
(make-vbar-tile resizeBorderWidth t ()))
(: shadowed-vbar-tile-l
(make-vbar-tile (- resizeBorderWidth 1) () 'left))
(: active-shadowed-vbar-tile-l
(make-vbar-tile (- resizeBorderWidth 1) t 'left))
(: shadowed-vbar-tile-r
(make-vbar-tile (- resizeBorderWidth 1) () 'right))
(: active-shadowed-vbar-tile-r
(make-vbar-tile (- resizeBorderWidth 1) t 'right))
(: shadowed-hbar-tile
(make-hbar-tile resizeBorderWidth () ()))
(: active-shadowed-hbar-tile
(make-hbar-tile resizeBorderWidth t ()))
(: shadowed-hbar-tile-t
(make-hbar-tile (- resizeBorderWidth 1) () t))
(: active-shadowed-hbar-tile-t
(make-hbar-tile (- resizeBorderWidth 1) t t))
(: border-vbar-tile
(make-vbar-tile frameBorderwidth () ()))
(: active-border-vbar-tile
(make-vbar-tile frameBorderwidth t ()))
(: border-vbar-tile-l
(make-vbar-tile (- frameBorderwidth 1) () 'left))
(: active-border-vbar-tile-l
(make-vbar-tile (- frameBorderwidth 1) t 'left))
(: border-vbar-tile-r
(make-vbar-tile (- frameBorderwidth 1) () 'right))
(: active-border-vbar-tile-r
(make-vbar-tile (- frameBorderwidth 1) t 'right))
(: border-hbar-tile
(make-hbar-tile frameBorderwidth () ()))
(: active-border-hbar-tile
(make-hbar-tile frameBorderwidth t ()))
(: border-hbar-tile-t
(make-hbar-tile (- frameBorderwidth 1) () t))
(: active-border-hbar-tile-t
(make-hbar-tile (- frameBorderwidth 1) t t))
(defun make-tl-pixmap (w h active seam spec)
(with (foreground (if active clientActiveBackground clientBackground)
tSC (if active clientActiveTopShadowColor clientTopShadowColor)
bSC (if active clientActiveBottomShadowColor clientBottomShadowColor)
theTile (pixmap-make w h))
(with (foreground tSC)
(draw-line theTile 0 0 (- w 1) 0)
(draw-line theTile 0 1 (- w 1) 1)
(draw-line theTile 0 0 0 (- h 1))
(draw-line theTile 1 0 1 (- h 1))
(if seam (draw-line theTile (- w 1) 0 (- w 1) (- h 2)))
)
(with (foreground bSC)
(if spec
(draw-line theTile (- h 1) (- h 1) (- w 1) (- h 1))
(progn
(draw-line theTile (- h 2) (- h 2) (- w 2) (- h 2))
(draw-line theTile (- h 2) (- h 1) (- w 1) (- h 1))))
(if seam (draw-line theTile (- w 2) 1 (- w 2) (- h 1)))
)
theTile
))
(defun make-tr-pixmap (w h active seam spec)
(with (foreground (if active clientActiveBackground clientBackground)
tSC (if active clientActiveTopShadowColor clientTopShadowColor)
bSC (if active clientActiveBottomShadowColor clientBottomShadowColor)
theTile (pixmap-make w h))
(with (foreground tSC)
(draw-line theTile 0 0 (- w 1) 0)
(draw-line theTile 0 1 (- w 2) 1)
(if seam (draw-line theTile 1 0 1 (- h 2)))
(if (not spec) (draw-line theTile (+ (- w h) 1) (- h 1)
(+ (- w h) 1) (- h 1)))
)
(with (foreground bSC)
(if seam (draw-line theTile 0 1 0 (- h 1)))
(draw-line theTile (- w 1) 1 (- w 1) (- h 1))
(draw-line theTile (- w 2) 2 (- w 2) (- h 1))
(draw-line theTile 0 (- h 1) (- w h) (- h 1))
(if (not spec)
(if seam (draw-line theTile 2 (- h 2) (+ (- w h) 1) (- h 2))
(draw-line theTile 0 (- h 2) (+ (- w h) 1) (- h 2))))
)
theTile
))
(defun make-bl-pixmap (w h active seam)
(with (foreground (if active clientActiveBackground clientBackground)
tSC (if active clientActiveTopShadowColor clientTopShadowColor)
bSC (if active clientActiveBottomShadowColor clientBottomShadowColor)
theTile (pixmap-make w h))
(with (foreground tSC)
(draw-line theTile 0 0 0 (- h 1))
(draw-line theTile 1 0 1 (- h 2))
(draw-line theTile h 0 (- w 1) 0)
(draw-line theTile (- h 1) 1 (- w 1) 1)
(if seam (draw-line theTile (- w 1) 0 (- w 1) (- h 2)))
)
(with (foreground bSC)
(draw-line theTile 1 (- h 1) (- w 1) (- h 1))
(draw-line theTile 2 (- h 2) (- w (if seam 2 1)) (- h 2))
(draw-line theTile (- h 2) 0 (- h 1) 0)
(draw-line theTile (- h 2) 1 (- h 2) 1)
(if seam (draw-line theTile (- w 2) 1 (- w 2) (- h 1)))
)
theTile
))
(defun make-br-pixmap (w h active seam)
(with (foreground (if active clientActiveBackground clientBackground)
tSC (if active clientActiveTopShadowColor clientTopShadowColor)
bSC (if active clientActiveBottomShadowColor clientBottomShadowColor)
theTile (pixmap-make w h))
(with (foreground tSC)
(draw-line theTile 0 0 (+ (- w h) 1) 0)
(draw-line theTile 0 1 (+ (- w h) 1) 1)
(if seam (draw-line theTile 1 0 1 (- h 2)))
)
(with (foreground bSC)
(draw-line theTile 0 (- h 1) (- w 1) (- h 1))
(draw-line theTile (if seam 2 0) (- h 2) (- w 1) (- h 2))
(draw-line theTile (- w 1) 0 (- w 1) (- h 1))
(draw-line theTile (- w 2) 0 (- w 2) (- h 2))
(if seam (draw-line theTile 0 2 0 (- h 1)))
)
theTile
))
(defun make-bv-pixmap (w h active)
(with (foreground (if active clientActiveBackground clientBackground)
tSC (if active clientActiveTopShadowColor clientTopShadowColor)
bSC (if active clientActiveBottomShadowColor clientBottomShadowColor)
theTile (pixmap-make w h))
(with (foreground tSC)
(draw-line theTile 0 1 (- w 1) 1)
(draw-line theTile 0 0 0 (- h 1))
(draw-line theTile 1 1 1 (- h 1))
)
(with (foreground bSC)
(draw-line theTile 1 0 (- w 1) 0)
(draw-line theTile (- w 1) 0 (- w 1) (- h 1))
(draw-line theTile (- w 2) 2 (- w 2) (- h 1))
)
theTile
))
(defun make-tv-pixmap (w h active spec)
(with (foreground (if active clientActiveBackground clientBackground)
tSC (if active clientActiveTopShadowColor clientTopShadowColor)
bSC (if active clientActiveBottomShadowColor clientBottomShadowColor)
theTile (pixmap-make w h))
(with (foreground tSC)
(draw-line theTile 0 0 0 (- h 1))
(if (not (eq spec 'right))
(draw-line theTile 1 0 1 (- h 1)))
(draw-line theTile 0 (- h 1) (- w 2) (- h 1))
)
(with (foreground bSC)
(if (not (eq spec 'left))
(draw-line theTile (- w 2) 0 (- w 2) (- h 2)))
(draw-line theTile (- w 1) 0 (- w 1) (- h 1))
(draw-line theTile 1 (- h 2) (- w 1) (- h 2))
)
theTile
))
; RESIZE HANDLE'S FSM :
; ===================
(: resize-plug.fsm
(fsm-make
(state-make
(on (user-event 'focus-in)
(: wob-tile (# 'activepixmap wob-property)) )
(on (user-event 'focus-out)
(: wob-tile (# 'pixmap wob-property)) )
(on (buttonpress 1 any)
(progn
(do-binding-button 1 (current-event-modifier)
'press '(frame border))
(resize-window)) )
(do-bindings-state '(frame border))
)
)
)
; BORDER'S FSM :
; ============
(: border.fsm
(fsm-make
(state-make
(on (user-event 'focus-in)
(: wob-tile (# 'activepixmap wob-property)) )
(on (user-event 'focus-out)
(: wob-tile (# 'pixmap wob-property)) )
(do-bindings-state '(frame border))
)
)
)
; THE PLUGS :
; =========
(defunq make-border-plug (pix-expr)
(with (borderwidth 0
fsm border.fsm
pixmap (with (active ()) (eval pix-expr))
activepixmap (with (active t) (eval pix-expr))
property (list 'pixmap pixmap 'activepixmap activepixmap))
(plug-make pixmap)))
(defunq make-resize-plug (cur pix-expr)
(with (borderwidth 0
cursor (if resizeCursors (eval cur) frame-cursor)
fsm resize-plug.fsm
tile ()
pixmap (with (active ()) (eval pix-expr))
activepixmap (with (active t) (eval pix-expr))
property (list 'pixmap pixmap 'activepixmap activepixmap))
(plug-make pixmap)))
(: border-plug-tl
(make-border-plug (make-tl-pixmap frameBorderwidth frameBorderwidth
active () ())))
(: border-plug-tr
(make-border-plug (make-tr-pixmap frameBorderwidth frameBorderwidth
active () ())))
(: border-plug-tl2
(make-border-plug (make-tl-pixmap frameBorderwidth (- frameBorderwidth 1)
active () t)))
(: border-plug-tr2
(make-border-plug (make-tr-pixmap frameBorderwidth (- frameBorderwidth 1)
active () t)))
(: border-plug-bl
(make-border-plug (make-bl-pixmap frameBorderwidth frameBorderwidth
active ())))
(: border-plug-br
(make-border-plug (make-br-pixmap frameBorderwidth frameBorderwidth
active ())))
(: top-resize-vplug-left
(make-resize-plug cursor-NW
(make-tv-pixmap resizeBorderWidth
(- mwm-resize-style-corner-size
resizeBorderWidth)
active ())))
(: top-resize-vplug-right
(make-resize-plug cursor-NE
(make-tv-pixmap resizeBorderWidth
(- mwm-resize-style-corner-size
resizeBorderWidth)
active ())))
(: top-resize-vplug-left2
(with (fsm resize-plug.fsm
borderwidth 0
cursor (if resizeCursors cursor-W frame-cursor)
tile shadowed-vbar-tile-l
property (list 'pixmap shadowed-vbar-tile-l
'activepixmap active-shadowed-vbar-tile-l))
(bar-make
(make-resize-plug cursor-NW
(make-tv-pixmap (- resizeBorderWidth 1)
(- mwm-resize-style-corner-size
resizeBorderWidth -1)
active 'left)))))
(: top-resize-vplug-right2
(with (fsm resize-plug.fsm
borderwidth 0
cursor (if resizeCursors cursor-E frame-cursor)
tile shadowed-vbar-tile-r
property (list 'pixmap shadowed-vbar-tile-r
'activepixmap active-shadowed-vbar-tile-r))
(bar-make
(make-resize-plug cursor-NE
(make-tv-pixmap (- resizeBorderWidth 1)
(- mwm-resize-style-corner-size
resizeBorderWidth -1)
active 'right)))))
(: top-resize-vplug-left-small
(if (> mwm-resize-style-corner-size
(+ 4 clientFontHeight resizeBorderWidth))
(make-resize-plug cursor-NW
(make-tv-pixmap resizeBorderWidth
(- mwm-resize-style-corner-size
resizeBorderWidth
clientFontHeight 4)
active ()))))
(: top-resize-vplug-right-small
(if (> mwm-resize-style-corner-size
(+ 4 clientFontHeight resizeBorderWidth))
(make-resize-plug cursor-NE
(make-tv-pixmap resizeBorderWidth
(- mwm-resize-style-corner-size
resizeBorderWidth
clientFontHeight 4)
active ()))))
(: bottom-resize-vplug-left
(make-resize-plug cursor-SW
(make-bv-pixmap resizeBorderWidth
(- mwm-resize-style-corner-size
resizeBorderWidth)
active)))
(: bottom-resize-vplug-right
(make-resize-plug cursor-SE
(make-bv-pixmap resizeBorderWidth
(- mwm-resize-style-corner-size
resizeBorderWidth)
active)))
(: bottom-resize-hplug-left
(make-resize-plug cursor-SW
(make-bl-pixmap mwm-resize-style-corner-size
resizeBorderWidth
active t)))
(: bottom-resize-hplug-right
(make-resize-plug cursor-SE
(make-br-pixmap mwm-resize-style-corner-size
resizeBorderWidth
active t)))
(: top-resize-hplug-left
(make-resize-plug cursor-NW
(make-tl-pixmap mwm-resize-style-corner-size
resizeBorderWidth
active t ())))
(: top-resize-hplug-right
(make-resize-plug cursor-NE
(make-tr-pixmap mwm-resize-style-corner-size
resizeBorderWidth
active t ())))
(: top-resize-hplug-left2
(make-resize-plug cursor-NW
(make-tl-pixmap mwm-resize-style-corner-size
(- resizeBorderWidth 1)
active t t)))
(: top-resize-hplug-right2
(make-resize-plug cursor-NE
(make-tr-pixmap mwm-resize-style-corner-size
(- resizeBorderWidth 1)
active t t)))
; THE BARS :
; ========
(: border-v-bar
(with (
fsm border.fsm
borderwidth 0
cursor frame-cursor
tile border-vbar-tile
property (list 'pixmap border-vbar-tile
'activepixmap active-border-vbar-tile)
)
(bar-make)
)
)
(: border-v-bar-l
(with (
fsm border.fsm
borderwidth 0
cursor frame-cursor
tile border-vbar-tile-l
property (list 'pixmap border-vbar-tile-l
'activepixmap active-border-vbar-tile-l)
)
(bar-make)
)
)
(: border-v-bar-r
(with (
fsm border.fsm
borderwidth 0
cursor frame-cursor
tile border-vbar-tile-r
property (list 'pixmap border-vbar-tile-r
'activepixmap active-border-vbar-tile-r)
)
(bar-make)
)
)
(: border-top-bar
(with (
fsm border.fsm
borderwidth 0
cursor frame-cursor
tile border-hbar-tile
property (list 'pixmap border-hbar-tile
'activepixmap active-border-hbar-tile)
)
(bar-make border-plug-tl () border-plug-tr)
)
)
(: border-top-bar2
(with (
fsm border.fsm
borderwidth 0
cursor frame-cursor
tile border-hbar-tile-t
property (list 'pixmap border-hbar-tile-t
'activepixmap active-border-hbar-tile-t)
)
(bar-make border-plug-tl2 () border-plug-tr2)
)
)
(: border-bottom-bar
(with (
fsm border.fsm
borderwidth 0
cursor frame-cursor
tile border-hbar-tile
property (list 'pixmap border-hbar-tile
'activepixmap active-border-hbar-tile)
)
(bar-make border-plug-bl () border-plug-br)
)
)
(defun left-bar ()
(if deco.border
(if deco.resizeh
(with (
fsm resize-plug.fsm
borderwidth 0
cursor (if resizeCursors cursor-W frame-cursor)
tile shadowed-vbar-tile
property (list 'pixmap shadowed-vbar-tile
'activepixmap active-shadowed-vbar-tile)
)
(bar-make (if (not deco.title)
top-resize-vplug-left
top-resize-vplug-left-small)
()
bottom-resize-vplug-left ))
border-v-bar)))
(defun right-bar ()
(if deco.border
(if deco.resizeh
(with (
fsm resize-plug.fsm
borderwidth 0
cursor (if resizeCursors cursor-E frame-cursor)
tile shadowed-vbar-tile
property (list 'pixmap shadowed-vbar-tile
'activepixmap active-shadowed-vbar-tile)
)
(bar-make (if (not deco.title)
top-resize-vplug-right
top-resize-vplug-right-small)
()
bottom-resize-vplug-right))
border-v-bar)))
(defun bottom-bar ()
(if deco.border
(if deco.resizeh
(with (
fsm resize-plug.fsm
borderwidth 0
cursor (if resizeCursors cursor-S frame-cursor)
tile shadowed-hbar-tile
plug-separator 0
property (list 'pixmap shadowed-hbar-tile
'activepixmap active-shadowed-hbar-tile)
)
(bar-make bottom-resize-hplug-left
()
bottom-resize-hplug-right))
border-bottom-bar)))
(defun top-bar ()
(if deco.border
(if deco.resizeh
(if deco.title
(with (
fsm resize-plug.fsm
borderwidth 0
cursor (if resizeCursors cursor-N frame-cursor)
tile shadowed-hbar-tile-t
plug-separator 0
property (list 'pixmap shadowed-hbar-tile-t
'activepixmap active-shadowed-hbar-tile-t)
)
(bar-make top-resize-hplug-left2
()
top-resize-hplug-right2))
(with (
fsm resize-plug.fsm
borderwidth 0
cursor (if resizeCursors cursor-N frame-cursor)
tile shadowed-hbar-tile
plug-separator 0
property (list 'pixmap shadowed-hbar-tile
'activepixmap active-shadowed-hbar-tile)
)
(bar-make top-resize-hplug-left
()
top-resize-hplug-right)))
(if deco.title
border-top-bar2
border-top-bar))))
;============================================================================
; FSM of the text field :
; =====================
(: edit-fsm
(fsm-make
(state-make
(on (user-event 'focus-in)
(progn
(: wob-background clientActiveBackground)
(wob-tile (with (foreground clientActiveForeground)
(active-label-make window-name clientFontList)))
) )
(on (user-event 'focus-out)
(progn
(: wob-background clientBackground)
(wob-tile (with (foreground clientForeground)
(active-label-make window-name clientFontList)))
) )
(on (user-event 'name-change)
(progn
(wob-tile
(with (foreground ;(if (# 'got-focus (property-of-wob window))
(if (= wob-background clientActiveBackground)
clientActiveForeground clientForeground))
(active-label-make window-name clientFontList)))
))
(on (buttonpress 1 alone)
(progn (send-user-event 'press wob-parent)
(do-binding-button 1 alone 'press '(title frame))
(with (cursor cross-cursor) (move-window))
(send-user-event 'release wob-parent)))
(do-bindings-state '(title frame))
)
))
; THE TITLE-BAR :
; =============
(: title-bar.width (+ 6 clientFontHeight))
(: shadowed-title-bar-tile
(make-hbar-tile title-bar.width () ()))
(: active-shadowed-title-bar-tile
(make-hbar-tile title-bar.width t ()))
(: shadowed-title-bar-tile2
(make-hbar-tile (- title-bar.width 2) () 'title))
(: active-shadowed-title-bar-tile2
(make-hbar-tile (- title-bar.width 2) t 'title))
(with (tmp clientActiveTopShadowColor
clientActiveTopShadowColor clientActiveBottomShadowColor
clientActiveBottomShadowColor tmp)
(: pressed-title-bar-tile2 (make-hbar-tile (- title-bar.width 2) t 'title))
)
(: titlebar-fsm
(fsm-make
(state-make
(on (user-event 'focus-in)
(: wob-tile (# 'activepixmap wob-property)) )
(on (user-event 'focus-out)
(: wob-tile (# 'pixmap wob-property)) )
(on (user-event 'press)
(: wob-tile (# 'pressedpixmap wob-property)) )
(on (user-event 'release)
(: wob-tile (# 'activepixmap wob-property)) )
(on (buttonpress 1 alone)
(progn (send-user-event 'press wob)
(do-binding-button 1 alone 'press '(title frame))
(with (cursor cross-cursor) (move-window))
(send-user-event 'release wob)))
(do-bindings-state '(title frame))
)))
(: editable-plug '(with (borderwidth 0
background clientBackground
foreground clientForeground
font clientFontList
menu ()
property (list 'name window-name)
fsm edit-fsm)
(plug-make (label-make window-name))))
(defun title-seam-pixmap (col)
(with (tile ()
foreground col)
(pixmap-make 1 (- title-bar.width 2))))
(defun inner-titlebar ()
(with (
fsm titlebar-fsm
property (list 'pixmap shadowed-title-bar-tile2
'activepixmap active-shadowed-title-bar-tile2
'pressedpixmap pressed-title-bar-tile2)
lseam (title-seam-pixmap clientTopShadowColor)
rseam (title-seam-pixmap clientBottomShadowColor)
alseam (title-seam-pixmap clientActiveTopShadowColor)
arseam (title-seam-pixmap clientActiveBottomShadowColor)
tile shadowed-title-bar-tile2
bar-min-width (- title-bar.width 2)
bar-max-width bar-min-width
)
(bar-make
(with (property (list 'pixmap lseam 'activepixmap alseam
'pressedpixmap arseam))
(plug-make lseam))
()
editable-plug
()
(with (property (list 'pixmap rseam 'activepixmap arseam
'pressedpixmap alseam))
(plug-make rseam))
)))
(defun make-title-row ()
(with (bar-min-width (if deco.border
(- title-bar.width 1)
title-bar.width)
bar-max-width bar-min-width
params1 (+
(if deco.menu (list button-of-menu))
(list (bar-make () (inner-titlebar) ()))
(if deco.minimize (list button-iconify))
(if deco.maximize (list button-zoom)))
params2 (+
(if deco.border
(if deco.resizeh
(list top-resize-vplug-left2)
(list border-v-bar-l)))
(list (bar-make (eval (+ '(bar-make) params1))))
(if deco.border
(if deco.resizeh
(list top-resize-vplug-right2)
(list border-v-bar-r)))
))
(eval (+ '(bar-make) params2))))
(defun titlebar ()
(if deco.title
(with (menu ()
cursor frame-cursor
borderwidth 0
background clientBackground
fsm ()
plug-separator 0
pixmap shadowed-title-bar-tile
activepixmap active-shadowed-title-bar-tile
property (list 'pixmap pixmap 'activepixmap activepixmap)
tile pixmap)
(if deco.border
(bar-make (bar-make (top-bar)
(make-title-row)))
(make-title-row))
)
(if deco.border (top-bar))
)
)
(df mwm-window-fsm ()
(fsm-make
(state-make
(# 0 (# 'window keyBindings))
(# 'wfsm (menu-wob menu))
window-std-behavior
(do-bindings-state '(window))
)
)
)
; THE MWM-LIKE WINDOW :
; ===================
(df mwm-win-deco-make ()
(with (inner-borderwidth 1
menu (eval (atom (get-res-value 'windowMenu)))
fsm (mwm-window-fsm)
cursor frame-cursor
borderwidth mwm-ed-borderwidth
borderpixel white
property (list 'resize-corner-size
(if deco.resizeh
mwm-resize-style-corner-size 1) )
grabs
(+ (# 1 (# 'window keyBindings))
(# 'app-grabs buttonBindings)
(# 'wgrabs (menu-wob menu))
window-std-grabs
)
)
(window-make (titlebar) (left-bar)
(right-bar) (bottom-bar) ())
)
)
(defname 'mwm-win.data screen. ())
(: default-deco ())
(: mwm-win
'(with (deco-string (get-res-value "clientDecoration")
deco-list ())
(if window-is-transient-for (: deco-list transientDecoration)
(if (= deco-string "all")
(: deco-list '(border maximize minimize resizeh menu title))
(= deco-string "none") (: deco-list ())
(: deco-list (listify-string deco-string))))
(get-deco-ctxt deco-list)
(mwm-win-deco-make)))
(: all '(maximize minimize menu resizeh border title))
(de get-deco-ctxt (theDeco)
(: deco.title ())
(: deco.border ())
(: deco.maximize ())
(: deco.minimize ())
(: deco.menu ())
(: deco.resizeh ())
(if (= theDeco 'none) ()
(= theDeco 'all) (get-deco-ctxt (eval theDeco))
(while theDeco
(set (atom (+ "deco." (# 0 theDeco))) t)
(: theDeco (sublist 1 (length theDeco) theDeco))
)
)
)