scx/scheme/xlib/client.scm

241 lines
8.2 KiB
Scheme

;; *** manipulate toplevel windows ***********************************
;; iconfiy-window send a WM_CHANGE_STATE message (in an appropiate
;; format), to the root window of the specified screen. See
;; XIconifyWindow.
;; returns #f on error.
(import-xlib-function iconify-window (display window screen-num)
"scx_Iconify_Window")
;; withdraw-window unmaps the specified window and sends a synthetic
;; UnmapNotify event to the root window of the specified screen. See
;; XWithdrawWindow.
;; returns #f on error.
(import-xlib-function withdraw-window (display window scr-num)
"scx_Withdraw_Window")
;; reconfigure-wm-window changes attributes of the specified window
;; similar to configure-window, or sends a ConfigureRequestEvent to
;; the root window if that fails. See XReconfigureWMWindow. See
;; configure-window.
;; returns #f on error.
(import-xlib-function reconfigure-wm-window
(display window scr-num changes)
"scx_Reconfigure_Wm_Window")
;; *** set or read a window's WM_* properties ************************
;; get-wm-command reads the WM_COMMAND property from the specified
;; window and returns it as a list of strings. See XGetCommand.
;; returns #f on error.
(import-xlib-function get-wm-command (display window)
"scx_Get_Wm_Command")
;; set-wm-command! sets the WM_COMMAND property (the command and
;; arguments used to invoke the application). The command has to be
;; specified as a list of strings. See XSetCommand.
(import-xlib-function set-wm-command! (display window command)
"scx_Set_Wm_Command")
;; get-wm-protocols function returns the list of atoms stored in the
;; WM_PROTOCOLS property on the specified window, or #f if this
;; property does not exist or has a bas format. These atoms describe
;; window manager protocols in which the owner of this window is
;; willing to participate. See XGetWMProtocols.
;; returns #f on error.
(import-xlib-function get-wm-protocols (display window)
"scx_Get_Wm_Protocols")
;; set-wm-protocols! sets the WM_PROTOCOLS property of the specified
;; window. protocols has to be a list of atoms. See XSetWMProtocols.
;; returns #f on error.
(import-xlib-function set-wm-protocols! (display window protocols)
"scx_Set_Wm_Protocols")
;; get-wm-class returns the class hint for the specified window. That
;; is a pair of strings (name . class) See XGetClassHint.
;; returns #f on error.
(import-xlib-function get-wm-class (display window)
"scx_Get_Wm_Class")
;; set-wm-class! sets the class hint for the specified window. See
;; XSetClassHint.
;; returns #f on error.
(import-xlib-function set-wm-class! (display window name class)
"scx_Set_Wm_Class")
;; *** set or read a window's WM_HINTS property **********************
(define-enumerated-type initial-state :initial-state
initial-state? initial-states initial-state-name initial-state-index
(withdrawn normal initial-state-2 iconic initial-state-4))
(define-exported-binding "scx-initial-state" :initial-state)
(define-exported-binding "scx-initial-states" initial-states)
(define-enumerated-type wm-hint :wm-hint
wm-hint? wm-hints wm-hint-name wm-hint-index
(input? initial-state icon-pixmap icon-window icon-position icon-mask
window-group wm-hint-7 urgency))
(define-exported-binding "scx-wm-hint" :wm-hint)
(define-exported-binding "scx-wm-hints" wm-hints)
(define-syntax make-wm-hint-alist
(syntax-rules
()
((make-wm-hint-alist (attr arg) rest ...)
(cons (cons (wm-hint attr) arg)
(make-wm-hint-alist rest ...)))
((make-wm-hint-alist)
'())))
;; get-wm-hints reads the window manager hints and returns them as an
;; alist mapping wm-hint types to specific values. See wm-hint. See
;; XGetWMHints for a description.
(import-xlib-function get-wm-hints (display window)
"scx_Get_Wm_Hints")
;; set-wm-hints! sets the specified window manager hints. The hints
;; must be specified as an alist of wm-hint values (see above) mapping
;; to the appropiate values. See XSetWMHints.
(import-xlib-function set-wm-hints! (display window wm-hint-alist)
"scx_Set_Wm_Hints")
;; get-transient-for returns the WM_TRANSIENT_FOR property for the
;; specified window. The value of that property is a window. See
;; XGetTransientForHint.
(import-xlib-function get-transient-for (display window)
"scx_Get_Transient_For")
;; set-transient-for! sets the WM_TRANSIENT_FOR property of the
;; specified window to the specified property-window. See
;; XSetTransientForHint.
(import-xlib-function set-transient-for! (display window prop_window)
"scx_Set_Transient_For")
;; get-text-property returns the property specified by atom of the
;; specified window as a property record. See get-window-property. See
;; XGetTextProperty.
(import-xlib-function get-text-property (display window atom)
"scx_Get_Text_Property")
;; set-text-property! sets the property specified by atom of the
;; specified window to value - a property record.
(import-xlib-function set-text-property! (display window value atom)
"scx_Set_Text_Property")
(define (property->string-list property)
(string->string-list (property:data property)))
(define xa-string 31) ;; defined in Xatom.h
(define (string-list->property strings)
(make-property xa-string (property-format char)
(string-list->string strings)))
;; The following function a wrappers for the get/set-text-property
;; function.
(define xa-wm-name 39)
(define xa-wm-icon-name 37)
(define xa-wm-client-machine 36)
(define (get-wm-name display w)
(get-text-property display w xa-wm-name))
(define (get-wm-icon-name display w)
(get-text-property display w xa-wm-icon-name))
(define (get-wm-client-machine display w)
(get-text-property display w xa-wm-client-machine))
(define (set-wm-name! display w s)
(set-text-property! display w s xa-wm-name))
(define (set-wm-icon-name! display w s)
(set-text-property! display w s xa-wm-icon-name))
(define (set-wm-client-machine! display w s)
(set-text-property! display w s xa-wm-client-machine))
;; an enumerated type for XSizeHints used by get-wm-normal-hints and
;; set-wm-normal-hints!
(define-enumerated-type size-hint :size-hint
size-hint?
size-hints
size-hint-name
size-hint-index
;; aspect should have the form ((min-x . min-y) . (max-x . max-y))
;; for win-gravity see gravity in create-window.
;; the other hints must be pairs of integers - (x . y) or (width . height)
;; us-position, us-size .....!!??
(us-position us-size position size min-size max-size resize-inc aspect
base-size win-gravity))
(define-exported-binding "scx-size-hint" :size-hint)
(define-exported-binding "scx-size-hints" size-hints)
(define-syntax make-size-hint-alist
(syntax-rules
()
((make-size-hint-alist (attr arg) rest ...)
(cons (cons (size-hint attr) arg)
(make-size-hint-alist rest ...)))
((make-size-hint-alist)
'())))
;; get-wm-normal-hints/set-wm-normal-hints! get or set the size hints
;; stored in the WM_NORMAL_HINTS property on the specified window. The
;; hints are '(x y width height us-position us-size min-width
;; min-height max-width max-height width-inc height-inc min-aspect-x
;; min-aspect-y max-aspect-x max-aspect-y base-width base-height
;; gravity). See XGetWMNormalHints, XSetWMNormalHints.
(import-xlib-function get-wm-normal-hints (display window)
"scx_Get_Wm_Normal_Hints")
(import-xlib-function set-wm-normal-hints! (display window alist)
"scx_Set_Wm_Normal_Hints")
;; get-icon-sizes returns the icon sizes specified by a window manager
;; as a list. See XGetIconSizes.
(define-record-type icon-size :icon-size
(make-icon-size min-width min-height max-width max-height width-inc
height-inc)
icon-size?
(min-width icon-size:min-width set-icon-size:min-width!)
(min-height icon-size:min-height set-icon-size:min-height!)
(max-width icon-size:max-width set-icon-size:max-width!)
(max-height icon-size:max-height set-icon-size:max-height!)
(width-inc icon-size:width-inc set-icon-size:width-inc!)
(height-inc icon-size:height-inc set-icon-size:height-inc!))
(define-exported-binding "scx-icon-size" :icon-size)
(import-xlib-function get-icon-sizes (display window)
"scx_Get_Icon_Sizes")
;; set-icon-sizes! is used only by window managers to set the
;; supported icon sizes. See icon-sizes, XSetIconSizes.
(import-xlib-function set-icon-sizes! (display window sizes)
"scx_Set_Icon_Sizes")