368 lines
12 KiB
Plaintext
368 lines
12 KiB
Plaintext
; Frame with name on the right
|
|
; Iconify, Maximise, Close and Stayontop buttons on the left
|
|
; This is my first attempt at writing a gwm window decoration
|
|
; ===========================================================================
|
|
|
|
;;File: cutewin.gwm
|
|
;;Author: Sundar Ranganathan - Techlead Corporation Inc.
|
|
;;Credit: Colas Nahaboo - Generously borrowed from Colas' simple-ed-win.gwm
|
|
;;GWM Version: 1.8c
|
|
|
|
(defaults-to
|
|
cutewin.borderwidth 3
|
|
cutewin.font (font-make "-*-clean-bold-*-*-*-16-*-*-*-*-*-*-*")
|
|
cutewin.active darkgrey
|
|
cutewin.inactive grey
|
|
cutewin.label.background (color-make 'navyblue)
|
|
cutewin.label.foreground white
|
|
edit-keys.return "Return"
|
|
edit-keys.backspace "BackSpace"
|
|
edit-keys.delete "Delete"
|
|
|
|
cutewin.context (list
|
|
'borderwidth cutewin.borderwidth
|
|
'font cutewin.font
|
|
'active cutewin.active
|
|
'inactive cutewin.inactive
|
|
'background cutewin.label.background
|
|
'foreground cutewin.label.foreground
|
|
)
|
|
)
|
|
|
|
(: cutewin.maximise-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (buttonpress 1 any)
|
|
(wob-pixmap (pixmap-load "maximise_pressed.xpm")))
|
|
(on (buttonrelease 1 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "maximise.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(progn (resize-window screen-width screen-height) (move-window 0 0))
|
|
))))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.close-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (buttonpress 1 any)
|
|
(wob-pixmap (pixmap-load "close_pressed.xpm")))
|
|
(on (buttonrelease 1 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "close.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(delete-window))
|
|
)))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.kill-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (buttonpress 1 any)
|
|
(wob-pixmap (pixmap-load "kill_pressed.xpm")))
|
|
(on (buttonrelease 1 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "kill.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(kill-window))
|
|
)))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.iconise-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (buttonpress 1 any)
|
|
(wob-pixmap (pixmap-load "iconise_pressed.xpm")))
|
|
(on (buttonrelease 1 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "iconise.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(progn (iconify-window)(raise-window)))
|
|
)))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.inform-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (buttonpress 1 any)
|
|
(wob-pixmap (pixmap-load "inform_pressed.xpm")))
|
|
(on (buttonrelease 1 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "inform.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(print-window-info))
|
|
)))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.stayontop-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (buttonpress 1 any)
|
|
(wob-pixmap (pixmap-load "stayontop_pressed.xpm")))
|
|
(on (buttonpress 2 any)
|
|
(wob-pixmap (pixmap-load "stayonbottom_pressed.xpm")))
|
|
(on (buttonrelease 1 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "stayontop.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(float.toggle 'up))
|
|
)))
|
|
(on (buttonrelease 2 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "stayontop.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(float.toggle 'down))
|
|
)))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.staynormal-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (buttonpress 1 any)
|
|
(wob-pixmap (pixmap-load "staynormal_pressed.xpm")))
|
|
(on (buttonrelease 1 any)
|
|
(with (cerx (current-event-relative-x)
|
|
cery (current-event-relative-y))
|
|
(progn
|
|
(wob-pixmap (pixmap-load "staynormal.xpm"))
|
|
(if (and (> cerx 0) (> cery 0) (< cerx wob-width) (< cery wob-height))
|
|
(float.toggle ()))
|
|
)))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.size-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (user-event 'resize)
|
|
(wob-tile (label-make (+ "Width: " (itoa window-width) " Height: " (itoa window-height)) cutewin.font )))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.position-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (user-event 'windowmove)
|
|
(wob-tile (label-make (+ "X: " (itoa window-x) " Y: " (itoa window-y)) cutewin.font )))
|
|
standard-title-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(: cutewin.titleplug-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (user-event 'name-change)
|
|
(with (foreground cutewin.label.foreground)
|
|
(wob-tile (active-label-make window-name cutewin.font))))
|
|
)))
|
|
|
|
(: cutewin.close-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
cursor
|
|
(with (background (color-make 'DeepPink)
|
|
foreground (color-make 'yellow))
|
|
(cursor-make XC_hand2)
|
|
)
|
|
borderpixel background fsm cutewin.close-fsm)
|
|
(plug-make (pixmap-load "close.xpm"))))
|
|
|
|
(: cutewin.kill-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
cursor
|
|
(with (background (color-make 'DeepPink)
|
|
foreground (color-make 'yellow))
|
|
(cursor-make XC_hand2)
|
|
)
|
|
borderpixel background fsm cutewin.kill-fsm)
|
|
(plug-make (pixmap-load "kill.xpm"))))
|
|
|
|
(: cutewin.maximise-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
cursor
|
|
(with (background (color-make 'DeepPink)
|
|
foreground (color-make 'yellow))
|
|
(cursor-make XC_hand2)
|
|
)
|
|
borderpixel background fsm cutewin.maximise-fsm)
|
|
(plug-make (pixmap-load "maximise.xpm"))))
|
|
|
|
(: cutewin.iconise-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
cursor
|
|
(with (background (color-make 'DeepPink)
|
|
foreground (color-make 'yellow))
|
|
(cursor-make XC_hand2)
|
|
)
|
|
borderpixel background fsm cutewin.iconise-fsm)
|
|
(plug-make (pixmap-load "iconise.xpm"))))
|
|
|
|
(: cutewin.inform-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
cursor
|
|
(with (background (color-make 'DeepPink)
|
|
foreground (color-make 'yellow))
|
|
(cursor-make XC_hand2)
|
|
)
|
|
borderpixel background fsm cutewin.inform-fsm)
|
|
(plug-make (pixmap-load "inform.xpm"))))
|
|
|
|
(: cutewin.stayontop-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
cursor
|
|
(with (background (color-make 'DeepPink)
|
|
foreground (color-make 'yellow))
|
|
(cursor-make XC_hand2)
|
|
)
|
|
borderpixel background fsm cutewin.stayontop-fsm)
|
|
(plug-make (pixmap-load "stayontop.xpm"))))
|
|
|
|
(: cutewin.staynormal-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
cursor
|
|
(with (background (color-make 'DeepPink)
|
|
foreground (color-make 'yellow))
|
|
(cursor-make XC_hand2)
|
|
)
|
|
borderpixel background fsm cutewin.staynormal-fsm)
|
|
(plug-make (pixmap-load "staynormal.xpm"))))
|
|
|
|
(: cutewin.title-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
font cutewin.font
|
|
borderpixel background fsm cutewin.titleplug-fsm)
|
|
(plug-make '(label-make window-name cutewin.font))))
|
|
|
|
(: cutewin.size-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
font cutewin.font
|
|
borderpixel background fsm cutewin.size-fsm)
|
|
(plug-make '(label-make (+ "Width: " (itoa window-width) " Height: " (itoa window-height)) cutewin.font ))))
|
|
|
|
(: cutewin.position-plug
|
|
'(with (borderwidth 0 background cutewin.label.background
|
|
foreground cutewin.label.foreground
|
|
font cutewin.font
|
|
borderpixel background fsm cutewin.position-fsm)
|
|
(plug-make '(label-make (+ "X: " (itoa window-x) " Y: " (itoa window-y)) cutewin.font ))))
|
|
|
|
(defun update-icon (update-icon.title)
|
|
(if (window-icon?)
|
|
(send-user-event 'get-title (window-icon))))
|
|
|
|
(: cutewin.titlebar-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on (user-event 'focus-in) (wob-background cutewin.active))
|
|
(on (user-event 'focus-out) (wob-background cutewin.inactive))
|
|
standard-title-behavior
|
|
standard-behavior)))
|
|
|
|
(: cutewin.titlebar
|
|
(with (borderwidth 1 background cutewin.inactive
|
|
fsm cutewin.titlebar-fsm
|
|
plug-separator 1
|
|
borderpixel cutewin.label.foreground
|
|
)
|
|
(bar-make () cutewin.title-plug ())))
|
|
|
|
(: cutewin.rightbar
|
|
(with (borderwidth 1 background cutewin.inactive
|
|
fsm cutewin.titlebar-fsm
|
|
plug-separator 1
|
|
borderpixel cutewin.label.foreground
|
|
)
|
|
(bar-make cutewin.inform-plug cutewin.iconise-plug cutewin.maximise-plug
|
|
cutewin.stayontop-plug cutewin.staynormal-plug cutewin.close-plug
|
|
() cutewin.kill-plug)))
|
|
|
|
(: cutewin.bottombar
|
|
(with (borderwidth 1 background cutewin.inactive
|
|
fsm cutewin.titlebar-fsm
|
|
plug-separator 1
|
|
borderpixel cutewin.label.foreground
|
|
)
|
|
(bar-make cutewin.size-plug () cutewin.position-plug)))
|
|
|
|
(: cutewin.result '(with (inner-borderwidth 1 fsm cutewin.window-fsm
|
|
borderwidth cutewin.borderwidth
|
|
borderpixel cutewin.inactive)
|
|
; grabs (+ window-grabs
|
|
; (if (and (boundp 'emacs-mouse-loaded)
|
|
; emacs-mouse-loaded)
|
|
; (list (button any with-control)))))
|
|
(window-make cutewin.titlebar () cutewin.rightbar
|
|
cutewin.bottombar ())))
|
|
|
|
(defname 'cutewin.data screen. ())
|
|
(df cutewin () (if cutewin.data cutewin.data
|
|
(: cutewin.data (eval cutewin.result))))
|
|
|
|
|
|
(: cutewin.window-fsm
|
|
(fsm-make
|
|
(state-make
|
|
(on focus-in
|
|
(progn
|
|
(if autoraise (raise-window))
|
|
(send-user-event 'focus-in)
|
|
(wob-borderpixel cutewin.active)))
|
|
(on focus-out
|
|
(progn (send-user-event 'focus-out)
|
|
(wob-borderpixel cutewin.inactive)))
|
|
window-behavior
|
|
standard-behavior
|
|
)))
|
|
|
|
(if (not (boundp 'cutewin-move-window-orig))
|
|
(progn
|
|
(: cutewin-move-window-orig move-window)
|
|
(defun move-window args
|
|
(eval (+ (list 'cutewin-move-window-orig) args))
|
|
(send-user-event 'windowmove))
|
|
))
|
|
|
|
(if (not (boundp 'cutewin-resize-window-orig))
|
|
(progn
|
|
(: cutewin-resize-window-orig resize-window)
|
|
(defun resize-window args
|
|
(eval (+ (list 'cutewin-resize-window-orig) args))
|
|
(send-user-event 'resize))
|
|
))
|