;; *** utils ********************************************************* (define-structure utils (export mdisplay assq/false flatten select* spawn* with-lock make-sync-point sync-point-release sync-point-wait create-options free-options get-option-value get-option set-option! get-options ((define-options-spec) :syntax) options-spec-union string->keys string->key key:keycode key:modifiers reparent-to-root window-path window-viewable? window-focused? window-contains-focus? take-focus delete-window window-exists? move-resize-window* root-rectangle window-rectangle clip-rectangle draw-shadow-rectangle invalidate-window text-center-pos window-level point-in-rectangle? maximize-window maximal-size/hints size-window desired-size/hints desired-position/hints) (open scheme i/o list-lib define-record-types finite-types enum-sets threads locks placeholders rendezvous signals handle rx-syntax field-reader-package xlib) (files utils)) (define-structure dragging (export install-dragging-control) (open scheme define-record-types threads rendezvous-channels rendezvous xlib utils) (files drag-window)) (define-structure titlebar (export create-titlebar destroy-titlebar titlebar? titlebar:window map-titlebar unmap-titlebar move-resize-titlebar set-titlebar-state! set-titlebar-title!) (open scheme define-record-types threads list-lib rendezvous-channels rendezvous xlib utils) (files titlebar)) ;; *** key-grab ****************************************************** (define-structure key-grab (export grab-shortcut) (open scheme define-record-types enum-sets weak threads list-lib rendezvous-channels rendezvous locks xlib utils) (files key-grab)) ;; *** manager ******************************************************* (define-structure manager (export wm? wm:type wm:dpy wm:window wm:colormap wm:options wm:out-channel wm:internal-out-channel (manager-type :syntax) manager-types manager-type-name create-wm destroy-wm wm-clients wm-current-client wm-manage-window wm-unmanage-window wm-select-client client? client:window client:client-window client:data set-client:data! client-name client-replace-window) (open scheme threads list-lib locks xlib define-record-types finite-types rendezvous-channels rendezvous utils key-grab) (files manager)) ;; *** move manager ************************************************** (define-structure move-wm (export create-move-wm) (open scheme list-lib define-record-types threads rendezvous-channels rendezvous xlib manager key-grab utils dragging titlebar) (files move-wm move-wm-resizer)) ;; *** split manager ************************************************* (define-structure split-wm (export create-split-wm split-wm?) (open scheme list-lib define-record-types threads rendezvous-channels rendezvous placeholders xlib manager utils) (files split-wm)) ;; *** switch manager ************************************************ (define-structure switch-wm (export create-switch-wm) (open scheme list-lib define-record-types threads rendezvous-channels rendezvous xlib manager titlebar dragging utils key-grab) (files switch-wm)) ;; *** main package ************************************************** (define-structure root-manager (export root-wm? create-root-wm) (open scheme list-lib define-record-types xlib rendezvous rendezvous-channels utils key-grab manager move-wm split-wm switch-wm ) (files root-manager)) (define-structure main (export start) (open scsh scheme threads xlib root-manager utils) (files main))