diff --git a/c/xlib/display.c b/c/xlib/display.c index 55c2302..f844ab5 100644 --- a/c/xlib/display.c +++ b/c/xlib/display.c @@ -55,9 +55,8 @@ s48_value scx_general_after_function_binding = S48_FALSE; static int scx_after_function_wrapper(Display* dpy) { s48_value display = scx_enter_display(dpy); s48_value fun = S48_SHARED_BINDING_REF(scx_general_after_function_binding); - s48_disable_interruptsB(); + s48_call_scheme(fun, 1, display); - s48_enable_interruptsB(); return 0; } @@ -93,9 +92,11 @@ s48_value scx_enter_display(Display* dpy) { for (i = ScreenCount(dpy)-1; i >= 0; i--) l = s48_cons(scx_enter_screen(ScreenOfDisplay(dpy, i)), l); S48_RECORD_SET(d, 13, l); - S48_RECORD_SET(d, 14, S48_FALSE); + S48_RECORD_SET(d, 14, S48_FALSE); /* the after-function */ XSetAfterFunction(dpy, &scx_after_function_wrapper); - S48_RECORD_SET(d, 15, S48_FALSE); + S48_RECORD_SET(d, 15, S48_FALSE); /* wakeup-port, set by initialize */ + S48_RECORD_SET(d, 16, S48_TRUE); /* use-warnings? */ + S48_RECORD_SET(d, 17, S48_FALSE); /* error-queue, set by initialize */ s48_call_scheme(S48_SHARED_BINDING_REF(scx_initialize_display_binding), 1, d); S48_GC_UNPROTECT(); diff --git a/c/xlib/types.c b/c/xlib/types.c index 08b6531..9a0cab3 100644 --- a/c/xlib/types.c +++ b/c/xlib/types.c @@ -57,7 +57,7 @@ s48_value scx_window_changes_binding = S48_FALSE; s48_value s48_checked_record_ref(s48_value value, int i, s48_value rectype) { s48_check_record_type(value, rectype); - return S48_RECORD_REF(value, i); + return S48_UNSAFE_RECORD_REF(value, i); } int s48_list_length(s48_value list) { diff --git a/scheme/xlib/client.scm b/scheme/xlib/client.scm index 22c0e18..7d2b3cd 100644 --- a/scheme/xlib/client.scm +++ b/scheme/xlib/client.scm @@ -5,7 +5,7 @@ ;; XIconifyWindow. ;; returns #f on error. -(import-lambda-definition iconify-window (display window screen-num) +(import-xlib-function iconify-window (display window screen-num) "scx_Iconify_Window") ;; withdraw-window unmaps the specified window and sends a synthetic @@ -13,7 +13,7 @@ ;; XWithdrawWindow. ;; returns #f on error. -(import-lambda-definition withdraw-window (display window scr-num) +(import-xlib-function withdraw-window (display window scr-num) "scx_Withdraw_Window") ;; reconfigure-wm-window changes attributes of the specified window @@ -22,7 +22,7 @@ ;; configure-window. ;; returns #f on error. -(import-lambda-definition reconfigure-wm-window +(import-xlib-function reconfigure-wm-window (display window scr-num changes) "scx_Reconfigure_Wm_Window") @@ -32,14 +32,14 @@ ;; window and returns it as a list of strings. See XGetCommand. ;; returns #f on error. -(import-lambda-definition get-wm-command (display window) +(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-lambda-definition set-wm-command! (display window command) +(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 @@ -49,28 +49,28 @@ ;; willing to participate. See XGetWMProtocols. ;; returns #f on error. -(import-lambda-definition get-wm-protocols (display window) +(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-lambda-definition set-wm-protocols! (display window protocols) +(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-lambda-definition get-wm-class (display window) +(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-lambda-definition set-wm-class! (display window name class) +(import-xlib-function set-wm-class! (display window name class) "scx_Set_Wm_Class") ;; *** set or read a window's WM_HINTS property ********************** @@ -103,41 +103,41 @@ ;; alist mapping wm-hint types to specific values. See wm-hint. See ;; XGetWMHints for a description. -(import-lambda-definition get-wm-hints (display window) +(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-lambda-definition set-wm-hints! (display window wm-hint-alist) +(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-lambda-definition get-transient-for (display window) +(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-lambda-definition set-transient-for! (display window prop_window) +(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-lambda-definition get-text-property (display window atom) +(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-lambda-definition set-text-property! (display window value atom) +(import-xlib-function set-text-property! (display window value atom) "scx_Set_Text_Property") (define (property->string-list property) @@ -208,10 +208,10 @@ ;; min-aspect-y max-aspect-x max-aspect-y base-width base-height ;; gravity). See XGetWMNormalHints, XSetWMNormalHints. -(import-lambda-definition get-wm-normal-hints (display window) +(import-xlib-function get-wm-normal-hints (display window) "scx_Get_Wm_Normal_Hints") -(import-lambda-definition set-wm-normal-hints! (display window alist) +(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 @@ -230,11 +230,11 @@ (define-exported-binding "scx-icon-size" :icon-size) -(import-lambda-definition get-icon-sizes (display window) +(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-lambda-definition set-icon-sizes! (display window sizes) +(import-xlib-function set-icon-sizes! (display window sizes) "scx_Set_Icon_Sizes") diff --git a/scheme/xlib/colormap.scm b/scheme/xlib/colormap.scm index ab693b5..96c996a 100644 --- a/scheme/xlib/colormap.scm +++ b/scheme/xlib/colormap.scm @@ -25,18 +25,18 @@ (define-exported-binding "scx-colormap-alloc" :colormap-alloc) -(import-lambda-definition create-colormap (display window visual alloc) +(import-xlib-function create-colormap (display window visual alloc) "scx_Create_Colormap") -(import-lambda-definition copy-colormap-and-free (display colormap) +(import-xlib-function copy-colormap-and-free (display colormap) "scx_Copy_Colormap_And_Free") -(import-lambda-definition free-colormap (display colormap) +(import-xlib-function free-colormap (display colormap) "scx_Free_Colormap") ;; *** allocate and free colors ************************************** -(import-lambda-definition alloc-color! (display colormap color) +(import-xlib-function alloc-color! (display colormap color) "scx_Alloc_Color") ;; red, green and blue can be a number between 0 (inclusive) and 1 @@ -46,7 +46,7 @@ (and (alloc-color! display colormap color) (color:pixel color)))) -(import-lambda-definition %alloc-named-color (display colormap color-name) +(import-xlib-function %alloc-named-color (display colormap color-name) "scx_Alloc_Named_Color") ;; returns a pair (screen-color exact-color) or #f @@ -58,7 +58,7 @@ (and res (car res)))) ;; returns a pair of two lists (plane-masks . pixels) or #f -(import-lambda-definition alloc-color-cells/planes +(import-xlib-function alloc-color-cells/planes (display colormap contig? nplanes npixels) "scx_Alloc_Color_Cells") @@ -67,16 +67,16 @@ (and r (cdr r)))) ;; returns a list of lists (pixels redmask greenmask bluemask) or #f -(import-lambda-definition alloc-color-planes +(import-xlib-function alloc-color-planes (display colormap contig? ncolors nreds ngreens nblues) "scx_Alloc_Color_Planes") -(import-lambda-definition free-colors (display colormap pixels planes) +(import-xlib-function free-colors (display colormap pixels planes) "scx_Free_Colors") ;; *** obtain color values ******************************************* -(import-lambda-definition query-colors! (display colormap colors) +(import-xlib-function query-colors! (display colormap colors) "scx_Query_Colors") (define (query-colors display colormap pixels) @@ -90,21 +90,21 @@ (define (query-color display colormap pixel) (car (query-colors display colormap (list pixel)))) -(import-lambda-definition lookup-color (display colormap color-name) +(import-xlib-function lookup-color (display colormap color-name) "scx_Lookup_Color") -(import-lambda-definition parse-color (display colormap spec) +(import-xlib-function parse-color (display colormap spec) "scx_Parse_Color") ;; *** set colors **************************************************** -(import-lambda-definition store-colors (display colormap colors) +(import-xlib-function store-colors (display colormap colors) "scx_Store_Colors") (define (store-color display colormap color) (store-colors display colormap (list color))) -(import-lambda-definition %store-named-color +(import-xlib-function %store-named-color (display colormap color-name pixel do-red do-green do-blue) "scx_Store_Named_Color") diff --git a/scheme/xlib/cursor.scm b/scheme/xlib/cursor.scm index 26c6f0d..e751a4d 100644 --- a/scheme/xlib/cursor.scm +++ b/scheme/xlib/cursor.scm @@ -2,17 +2,17 @@ ;; *** create cursors ************************************************ -(import-lambda-definition create-pixmap-cursor +(import-xlib-function create-pixmap-cursor (display source mask foreground-color background-color x y) "scx_Create_Pixmap_Cursor") ;; source-char and mask-char have to be integers. -(import-lambda-definition create-glyph-cursor +(import-xlib-function create-glyph-cursor (display source-font mask-font source-char mask-char foreground-color background-color) "scx_Create_Glyph_Cursor") -(import-lambda-definition create-font-cursor (display shape) +(import-xlib-function create-font-cursor (display shape) "scx_Create_Font_Cursor") (define xc-X-cursor 0) @@ -95,19 +95,19 @@ ;; *** define cursors ************************************************ -(import-lambda-definition define-cursor (display window cursor) +(import-xlib-function define-cursor (display window cursor) "scx_Define_Cursor") -(import-lambda-definition undefine-cursor (display window) +(import-xlib-function undefine-cursor (display window) "scx_Undefine_Cursor") ;; *** manipulate cursors ******************************************** -(import-lambda-definition recolor-cursor +(import-xlib-function recolor-cursor (display cursor foreground-color background-color) "scx_Recolor_Cursor") -(import-lambda-definition free-cursor (display cursor) +(import-xlib-function free-cursor (display cursor) "scx_Free_Cursor") ;; query-best-cursor defined in gcontext.scm diff --git a/scheme/xlib/display.scm b/scheme/xlib/display.scm index a0e3676..0d250f3 100644 --- a/scheme/xlib/display.scm +++ b/scheme/xlib/display.scm @@ -1,11 +1,60 @@ ;; Copyright (c) 2001-2003 by Norbert Freudemann, David Frese +(define-syntax import-xlib-function + (lambda (exp rename compare) + (let ((id (cadr exp)) + (formals (caddr exp)) + (external-id (cadddr exp)) + (%define (rename 'define)) + (%begin (rename 'begin)) + (%lambda (rename 'lambda)) + (%binding (rename 'binding)) + (%import (rename 'import-lambda-definition)) + (%call-xlib-function (rename 'call-xlib-function))) + `(,%begin + (,%import ,%binding ,formals ,external-id) + (,%define ,id + (,%lambda ,formals + (,%call-xlib-function ,(car formals) ,id + (,%lambda () + (,%binding . ,formals))))))))) + +(define (call-xlib-function display name thunk) + (if (display? display) + (if (display:warnings? display) + (call-critical + (lambda () + (let* ((queue (display:error-queue display)) + (result (thunk))) + (if (not (eq? queue (display:error-queue display))) + (let* ((next (next-x-error-queue queue)) + (error (x-error-queue:this next))) + (signal-x-warning error)) + result)))) + (thunk)) + (error "first argument of an xlib-function must be a display object" + name display))) + +(define (call-critical thunk) + (let ((old-enabled (set-enabled-interrupts! no-interrupts)) + (result (call-with-current-continuation + (lambda (return) + (cons #t + (with-handler (lambda (condition punt) + (return (cons #f condition))) + thunk)))))) + (set-enabled-interrupts! old-enabled) + (if (car result) + (cdr result) + (signal-condition (cdr result))))) + ;; TODO: pixmap-formats (XListPixmapFormats) (define-record-type display :display (make-display cpointer connection-number protocol-version protocol-revision server-vendor image-byte-order bitmap-unit bitmap-pad bitmap-bit-order vendor-release queue-length name - default-screen screens after-function wakeup) + default-screen screens after-function wakeup + warnings? error-queue) display? (cpointer display:cpointer) (connection-number display:connection-number) @@ -22,7 +71,9 @@ (default-screen display:default-screen) (screens display:screens) (after-function display:after-function set-display:after-function!) - (wakeup display:wakeup set-display:wakeup!)) + (wakeup display:wakeup set-display:wakeup!) + (warnings? display:warnings? set-display:warnings?!) + (error-queue display:error-queue set-display:error-queue!)) (define-exported-binding "scx-display" :display) @@ -33,6 +84,7 @@ (car (display:wakeup dpy))) (define (initialize-display dpy) + (set-display:error-queue! dpy (empty-x-error-queue)) (call-with-values pipe (lambda (r w) (set-display:wakeup! dpy (cons r w))))) @@ -112,7 +164,7 @@ (error "invalid arguments" (cdr args))))));; TODO (%open-display display-name))) -(import-lambda-definition close-display (display) +(import-xlib-function close-display (display) "scx_Close_Display") (define none 0) @@ -176,19 +228,19 @@ ;; *** handle output buffer or event queue *************************** -(import-lambda-definition display-flush (display) +(import-xlib-function display-flush (display) "scx_Display_Flush") -(import-lambda-definition display-sync (display discard?) +(import-xlib-function display-sync (display discard?) "scx_Display_Sync") ;; display-no-op sends a NoOperation protocol request to the X server, thereby ;; exercising the connection. See XNoOp. -(import-lambda-definition display-no-op (display) +(import-xlib-function display-no-op (display) "scx_No_Op") ;; *** select input events ******************************************* -(import-lambda-definition display-select-input (display window event-mask) +(import-xlib-function display-select-input (display window event-mask) "scx_Display_Select_Input") diff --git a/scheme/xlib/error.scm b/scheme/xlib/error.scm index d5972d7..707b046 100644 --- a/scheme/xlib/error.scm +++ b/scheme/xlib/error.scm @@ -161,32 +161,24 @@ (define (x-warning:x-error w) (cadr (condition-stuff w))) (define (signal-x-warning x-error) - (signal 'x-warning (x-error->string x-error) x-error)) + (signal 'x-warning (x-error:text x-error) + (opcode->string (x-error:major-opcode x-error)) + (x-error:resource-id x-error) + x-error)) ;; Call synchronize to have the warnings signaled where they belong to. -(define (use-x-error-warnings!) - (set-error-handler! (lambda (display error) - (signal-x-warning error)))) +(define (use-x-error-warnings! display on?) + (let ((was (display:warnings? display))) ;; lock?? + (set-display:warnings?! display on?) + was)) ;; *** error-queue *************************************************** ;; Interface: -;; (use-x-error-queue!) returns a thunk that returns the most recent queue -;; element. ;; (empty-x-error-queue? q) return #t only for the initial queue. ;; (next-x-error-queue q) returns the next queue element, blocks if necessary. ;; (x-error-queue:this q) returns the x-error of that queue. - -(define (use-x-error-queue!) ;; exp - (let* ((most-recent-x-error-queue empty-x-error-queue) - (handler (lambda (display error) - (set-next-x-error-queue! most-recent-x-error-queue - (make-x-error-queue error)) - (set! most-recent-x-error-queue - (next-x-error-queue most-recent-x-error-queue))))) - (set-error-handler! handler) - (lambda () most-recent-x-error-queue))) (define-record-type x-error-queue :x-error-queue (really-make-x-error-queue this next) @@ -197,7 +189,9 @@ (define (make-x-error-queue error) (really-make-x-error-queue error (make-placeholder))) -(define empty-x-error-queue (make-x-error-queue #f)) +(define (empty-x-error-queue) + (make-x-error-queue #f)) + (define (empty-x-error-queue? obj) (eq? obj empty-x-error-queue)) @@ -210,30 +204,13 @@ ;; *** default error handlers **************************************** -(define *x-error-handler* #f) (define (internal-x-error-handler display error) - (if *x-error-handler* - (*x-error-handler* display error) - #f)) + (let ((queue (make-x-error-queue error))) + (set-next-x-error-queue! (display:error-queue display) queue) + (set-display:error-queue! display queue))) + (define-exported-binding "internal-x-error-handler" internal-x-error-handler) -(define (set-error-handler! handler) - (let ((old-handler *x-error-handler*)) - (set! *x-error-handler* handler) - old-handler)) - -;(import-lambda-definition %set-error-handler (handler) -; "scx_Set_Error_Handler") - -;(import-lambda-definition call-c-error-handler (pointer display event) -; "scx_Call_C_Error_Handler") - -;(define (set-error-handler! handler) -; (let ((res (%set-error-handler handler))) -; (if (number? res) -; (lambda (display event) (call-c-error-handler (res display event))) -; res))) - (import-lambda-definition get-error-text (display code) "scx_Get_Error_Text") @@ -256,7 +233,3 @@ (let ((old-handler *x-fatal-error-handler*)) (set! *x-fatal-error-handler* handler) old-handler)) - -;; *** The default is to use warnings ******************************** - -(use-x-error-warnings!) diff --git a/scheme/xlib/event.scm b/scheme/xlib/event.scm index 05bf885..79058fb 100644 --- a/scheme/xlib/event.scm +++ b/scheme/xlib/event.scm @@ -39,7 +39,7 @@ (define-exported-binding "scx-queued-mode" :queued-mode) -(import-lambda-definition events-queued (display mode) +(import-xlib-function events-queued (display mode) "scx_Events_Queued") (define (event-ready? display) @@ -49,22 +49,22 @@ ;; events-pending is identical to events-queued with after-flush ;; mode. -(import-lambda-definition events-pending (display) +(import-xlib-function events-pending (display) "scx_Events_Pending") ;; Other event reading *********************************************** -(import-lambda-definition next-event (display) +(import-xlib-function next-event (display) "scx_Next_Event") -(import-lambda-definition peek-event (display) +(import-xlib-function peek-event (display) "scx_Peek_Event") ;; returns a list of (time . (x . y)) elements -(import-lambda-definition get-motion-events (display window from to) +(import-xlib-function get-motion-events (display window from to) "scx_Get_Motion_Events") ;; Sending events **************************************************** -(import-lambda-definition send-event (display window propagate mask event) +(import-xlib-function send-event (display window propagate mask event) "scx_Send_Event") diff --git a/scheme/xlib/font.scm b/scheme/xlib/font.scm index 20aca56..ab6bca1 100644 --- a/scheme/xlib/font.scm +++ b/scheme/xlib/font.scm @@ -48,21 +48,21 @@ ;; *** load or unload fonts ****************************************** -(import-lambda-definition load-font (display name) +(import-xlib-function load-font (display name) "scx_Load_Font") -(import-lambda-definition unload-font (display font) +(import-xlib-function unload-font (display font) "scx_Unload_Font") ;; returns a font-struct record or #f -(import-lambda-definition query-font (display font-id) +(import-xlib-function query-font (display font-id) "scx_Query_Font") ;; returns a font-struct record or #f -(import-lambda-definition load-query-font (display name) +(import-xlib-function load-query-font (display name) "scx_Load_Query_Font") -(import-lambda-definition free-font (display font-struct) +(import-xlib-function free-font (display font-struct) "scx_Free_Font") (define (get-font-property font-struct atom) @@ -71,19 +71,19 @@ ;; *** obtain or free font names and information ********************* -(import-lambda-definition list-fonts (display pattern maxnames) +(import-xlib-function list-fonts (display pattern maxnames) "scx_List_Fonts") ;; returns an alist mapping name -> font-struct -(import-lambda-definition list-fonts-with-info (display pattern maxnames) +(import-xlib-function list-fonts-with-info (display pattern maxnames) "scx_List_Fonts_With_Info") ;; *** set or get the font search path ******************************* -(import-lambda-definition set-font-path (display directories) +(import-xlib-function set-font-path (display directories) "scx_Set_Font_Path") -(import-lambda-definition get-font-path (display) +(import-xlib-function get-font-path (display) "scx_Get_Font_Path") ;; TODO: ?? diff --git a/scheme/xlib/gcontext.scm b/scheme/xlib/gcontext.scm index 61a9dec..e6d8918 100644 --- a/scheme/xlib/gcontext.scm +++ b/scheme/xlib/gcontext.scm @@ -103,10 +103,10 @@ ;; *** create or free graphics contexts ****************************** -(import-lambda-definition create-gc (display drawable gc-value-alist) +(import-xlib-function create-gc (display drawable gc-value-alist) "scx_Create_Gc") -(import-lambda-definition copy-gc! (display srck dest mask) +(import-xlib-function copy-gc! (display srck dest mask) "scx_Copy_Gc") (define (copy-gc display drawable src) @@ -114,7 +114,7 @@ (copy-gc! display src all-gc-values gc) gc)) -(import-lambda-definition change-gc (display gc values) +(import-xlib-function change-gc (display gc values) "scx_Change_Gc") (define (make-gc-setter name) @@ -146,7 +146,7 @@ (define set-gc-dash-offset! (make-gc-setter (gc-value dash-offset))) (define set-gc-dashes! (make-gc-setter (gc-value dashes))) -(import-lambda-definition get-gc-values (display gc values) +(import-xlib-function get-gc-values (display gc values) "scx_Get_Gc_Values") (define (make-gc-getter name) @@ -178,7 +178,7 @@ (define gc-dash-offset (make-gc-getter (gc-value dash-offset))) (define gc-dashes (make-gc-getter (gc-value dashes))) -(import-lambda-definition free-gc (display gc) +(import-xlib-function free-gc (display gc) "scx_Free_Gc") (import-lambda-definition gcontext-from-gc (gc) @@ -194,7 +194,7 @@ (cap-style cap-style) (join-style join-style)))) -(import-lambda-definition set-dashes! (display gc dashoffset dashlist) +(import-xlib-function set-dashes! (display gc dashoffset dashlist) "scx_Set_Dashes") (define (set-clip-origin display gc x-origin y-origin) @@ -211,16 +211,21 @@ (define-exported-binding "scx-rectangle-orderings" rectangle-orderings) ;; rectangles has to be list of (x y width height) lists. -(import-lambda-definition set-clip-rectangles! +(import-xlib-function set-clip-rectangles! (display gc x-origin y-origin rectangles ordering) "scx_Set_Clip_Rectangles") ;; *** determine efficient sizes ************************************* ;; returns a pair (width . height) -(import-lambda-definition %query-best-size (screen class width height) +(import-lambda-definition %%query-best-size (screen class width height) "scx_Query_Best_Size") +(define (%query-best-size screen class width height) + (call-xlib-function (screen:display screen) 'query-best-size + (lambda () + (%%query-best-size screen class width height)))) + (define (query-best-cursor screen width height) (%query-best-size screen 0 width height)) diff --git a/scheme/xlib/grab.scm b/scheme/xlib/grab.scm index 4a30d41..3cdcbeb 100644 --- a/scheme/xlib/grab.scm +++ b/scheme/xlib/grab.scm @@ -14,15 +14,15 @@ (define-exported-binding "scx-grab-states" grab-states) -(import-lambda-definition grab-pointer +(import-xlib-function grab-pointer (display grab-window owner-events? events ptr-mode kbd-mode confine-to cursor time) "scx_Grab_Pointer") -(import-lambda-definition ungrab-pointer (display time) +(import-xlib-function ungrab-pointer (display time) "scx_Ungrab_Pointer") -(import-lambda-definition change-active-pointer-grab +(import-xlib-function change-active-pointer-grab (display events cursor time) "scx_Change_Active_Pointer_Grab") @@ -51,30 +51,30 @@ (define-exported-binding "scx-button" :button) (define-exported-binding "scx-buttons" buttons) -(import-lambda-definition grab-button +(import-xlib-function grab-button (display button modifiers grab-window owner-events? events ptr-mode kbd-mode confine-to cursor) "scx_Grab_Button") -(import-lambda-definition ungrab-button (display button modifiers grab-window) +(import-xlib-function ungrab-button (display button modifiers grab-window) "scx_Ungrab_Button") ;; *** grab the keyboard ********************************************* -(import-lambda-definition grab-keyboard +(import-xlib-function grab-keyboard (display grab-window owner-events? ptr-mode kbd-mode time) "scx_Grab_Keyboard") -(import-lambda-definition ungrab-keyboard (display time) +(import-xlib-function ungrab-keyboard (display time) "scx_Ungrab_Keyboard") ;; *** grab keyboard keys ******************************************** -(import-lambda-definition grab-key +(import-xlib-function grab-key (display keycode modifiers grab-window owner-events? ptr-mode kbd-mode) "scx_Grab_Key") -(import-lambda-definition ungrab-key (display keycode modifiers grab-window) +(import-xlib-function ungrab-key (display keycode modifiers grab-window) "scx_Ungrab_Key") ;; *** release queued events ***************************************** @@ -86,7 +86,7 @@ (define-exported-binding "scx-event-mode" :event-mode) -(import-lambda-definition allow-events (display event-mode time) +(import-xlib-function allow-events (display event-mode time) "scx_Allow_Events") ;; *** grab the server *********************************************** @@ -96,12 +96,12 @@ ;; not grab the X server any more than is absolutely necessary. See ;; XGrabServer. -(import-lambda-definition grab-server (display) +(import-xlib-function grab-server (display) "scx_Grab_Server") ;; ungrab-server restarts processing of requests and close downs on ;; other connections. You should avoid grabbing the X server as much ;; as possible. See XUngrabServer. -(import-lambda-definition ungrab-server (display) +(import-xlib-function ungrab-server (display) "scx_Ungrab_Server") diff --git a/scheme/xlib/graphics.scm b/scheme/xlib/graphics.scm index 72c0a52..502eb56 100644 --- a/scheme/xlib/graphics.scm +++ b/scheme/xlib/graphics.scm @@ -2,11 +2,11 @@ ;; *** copy areas **************************************************** -(import-lambda-definition copy-area +(import-xlib-function copy-area (display src dest gc src-x src-y width height dest-x dest-y) "scx_Copy_Area") -(import-lambda-definition copy-plane +(import-xlib-function copy-plane (display src dest gc src-x src-y width height dest-x dest-y plane) "scx_Copy_Plane") @@ -18,23 +18,23 @@ (define-exported-binding "scx-coord-mode" :coord-mode) -(import-lambda-definition draw-point (display drawable gc x y) +(import-xlib-function draw-point (display drawable gc x y) "scx_Draw_Point") ;; points has to be a list of (x . y) pairs -(import-lambda-definition draw-points (display drawable gc points mode) +(import-xlib-function draw-points (display drawable gc points mode) "scx_Draw_Points") ;; *** draw lines, polygons ****************************************** -(import-lambda-definition draw-line (display drawable gc x1 y1 x2 y2) +(import-xlib-function draw-line (display drawable gc x1 y1 x2 y2) "scx_Draw_Line") ;; points has to be a list of (x . y) pairs -(import-lambda-definition draw-lines (display drawable gc points mode) +(import-xlib-function draw-lines (display drawable gc points mode) "scx_Draw_Lines") -(import-lambda-definition draw-segments (display drawable gc segments) +(import-xlib-function draw-segments (display drawable gc segments) "scx_Draw_Segments") (define-record-type segment :segment @@ -49,7 +49,7 @@ ;; *** draw rectangles *********************************************** -(import-lambda-definition draw-rectangle +(import-xlib-function draw-rectangle (display drawable gc x y width height) "scx_Draw_Rectangle") @@ -68,12 +68,12 @@ (define-exported-binding "scx-rectangle" :rectangle) -(import-lambda-definition draw-rectangles (display drawable gc rectangles) +(import-xlib-function draw-rectangles (display drawable gc rectangles) "scx_Draw_Rectangles") ;; *** draw arcs ***************************************************** -(import-lambda-definition draw-arc +(import-xlib-function draw-arc (display drawable gc x y width height angle1 angle2) "scx_Draw_Arc") @@ -89,16 +89,16 @@ (define-exported-binding "scx-arc" :arc) -(import-lambda-definition draw-arcs (display drawable gc arcs) +(import-xlib-function draw-arcs (display drawable gc arcs) "scx_Draw_Arcs") ;; *** fill rectangles, polygons, or arcs **************************** -(import-lambda-definition fill-rectangle +(import-xlib-function fill-rectangle (display drawable gc x y width height) "scx_Fill_Rectangle") -(import-lambda-definition fill-rectangles (display drawable gc rectangles) +(import-xlib-function fill-rectangles (display drawable gc rectangles) "scx_Fill_Rectangles") (define-enumerated-type polygon-shape :polygon-shape @@ -107,15 +107,15 @@ (define-exported-binding "scx-polygon-shape" :polygon-shape) -(import-lambda-definition fill-polygon (display drawable gc points shape mode) +(import-xlib-function fill-polygon (display drawable gc points shape mode) "scx_Fill_Polygon") -(import-lambda-definition fill-arc +(import-xlib-function fill-arc (display drawable gc x y width height angle1 angle2) "scx_Fill_Arc") ;; arcs has to be a list of (x y width height angle1 angle2) lists. -(import-lambda-definition fill-arcs (display drawable gc arcs) +(import-xlib-function fill-arcs (display drawable gc arcs) "scx_Fill_Arcs") ;; *** auxiliary functions ******************************************* diff --git a/scheme/xlib/key.scm b/scheme/xlib/key.scm index f14c94b..569030d 100644 --- a/scheme/xlib/key.scm +++ b/scheme/xlib/key.scm @@ -9,17 +9,17 @@ ;; a keyboard mapping is a list of lists of keysyms -(import-lambda-definition change-keyboard-mapping +(import-xlib-function change-keyboard-mapping (display first-keycode keysyms-lists) "scx_Change_Keyboard_Mapping") ;; returns keycode-count lists of keysyms -(import-lambda-definition get-keyboard-mapping +(import-xlib-function get-keyboard-mapping (display first-keycode keycode-count) "scx_Get_Keyboard_Mapping") ;; returns a pair (min-keycodes . max-keycodes) -(import-lambda-definition display-keycodes (display) +(import-xlib-function display-keycodes (display) "scx_Display_Keycodes") ;; a modmap is an alist mapping a modifier to a list of @@ -27,10 +27,10 @@ ;; control) (state mod1) (state mod2) (state mod3) (state mod4) ;; (state mod5) -(import-lambda-definition set-modifier-mapping (display modmap) +(import-xlib-function set-modifier-mapping (display modmap) "scx_Set_Modifier_Mapping") -(import-lambda-definition get-modifier-mapping (display) +(import-xlib-function get-modifier-mapping (display) "scx_Get_Modifier_Mapping") ;; *** convert keysyms *********************************************** @@ -43,10 +43,10 @@ ;; TODO include X11/keysymdef.h ?? -(import-lambda-definition keycode->keysym (display keycode index) +(import-xlib-function keycode->keysym (display keycode index) "scx_Keycode_To_Keysym") -(import-lambda-definition keysym->keycode (display keysym) +(import-xlib-function keysym->keycode (display keysym) "scx_Keysym_To_Keycode") ;; returns a pair (lower . upper) @@ -61,18 +61,32 @@ ;; *** handle keyboard input events in Latin-1 *********************** -(import-lambda-definition lookup-keysym (key-event index) +(import-lambda-definition %lookup-keysym (key-event index) "scx_Lookup_Keysym") -(import-lambda-definition refresh-keyboard-mapping (mapping-event) +(define (lookup-keysym key-event index) + (call-xlib-function (key-event-display key-event) 'lookup-keysym + (lambda () (%lookup-keysym key-event index)))) + +(import-lambda-definition %refresh-keyboard-mapping (mapping-event) "scx_Refresh_Keyboard_Mapping") +(define (refresh-keyboard-mapping mapping-event) + (call-xlib-function (mapping-event-display mapping-event) + 'refresh-keyboard-mapping + (lambda () (%refresh-keyboard-mapping mapping-event)))) + ;; returns a pair (keysym . string) -(import-lambda-definition lookup-string/keysym (key-event) +(import-lambda-definition %lookup-string/keysym (key-event) "scx_Lookup_String") +(define (lookup-string/keysym key-event) + (call-xlib-function (key-event-display key-event) + 'lookup-string/keysym + (lambda () (%lookup-string/keysym key-event)))) + (define (lookup-string key-event) (cdr (lookup-string/keysym key-event))) -(import-lambda-definition rebind-keysym (display keysym mod-keysyms string) +(import-xlib-function rebind-keysym (display keysym mod-keysyms string) "scx_Rebind_Keysym") diff --git a/scheme/xlib/pixmap.scm b/scheme/xlib/pixmap.scm index ee8f215..086b92c 100644 --- a/scheme/xlib/pixmap.scm +++ b/scheme/xlib/pixmap.scm @@ -2,10 +2,10 @@ ;; *** create or destroy pixmaps ************************************* -(import-lambda-definition create-pixmap (display drawable width height depth) +(import-xlib-function create-pixmap (display drawable width height depth) "scx_Create_Pixmap") -(import-lambda-definition free-pixmap (display pixmap) +(import-xlib-function free-pixmap (display pixmap) "scx_Free_Pixmap") ;; *** manipulate bitmaps ******************************************** @@ -17,7 +17,7 @@ ((2) (error "invalid bitmap data in file" data)) ((3) (error "not enough memory to create bitmap" data)))) -(import-lambda-definition %read-bitmap-file (display drawable filename) +(import-xlib-function %read-bitmap-file (display drawable filename) "scx_Read_Bitmap_File") ;; returns a list (pixmap width height x-hot y-hot). May raise an error. @@ -27,7 +27,7 @@ (bitmap-error res filename) res))) -(import-lambda-definition %write-bitmap-file +(import-xlib-function %write-bitmap-file (display filename bitmap width height x-hot y-hot) "scx_Write_Bitmap_File") @@ -40,14 +40,14 @@ ;; image found in data, which has to be a string. Such an image can be ;; generated with write-bitmap-file. See XCreateBitmapFromData. -(import-lambda-definition create-bitmap-from-data (display drawable data w h) +(import-xlib-function create-bitmap-from-data (display drawable data w h) "scx_Create_Bitmap_From_Data") ;; create-pixmap-from-bitmap-data creates a pixmap of the given depth ;; and then does a bitmap-format XPutImage of the data into it. See ;; XCreatePixmapFromBitmapData. -(import-lambda-definition create-pixmap-from-bitmap-data +(import-xlib-function create-pixmap-from-bitmap-data (display drawable data width height foreground background depth) "scx_Create_Pixmap_From_Bitmap_Data") diff --git a/scheme/xlib/property.scm b/scheme/xlib/property.scm index 21cfcd0..757a883 100644 --- a/scheme/xlib/property.scm +++ b/scheme/xlib/property.scm @@ -12,14 +12,14 @@ ;; *** create or return atom names *********************************** -(import-lambda-definition intern-atom (display atom-name only-if-exists?) +(import-xlib-function intern-atom (display atom-name only-if-exists?) "scx_Intern_Atom") ;; returns a list of atoms or #f -(import-lambda-definition intern-atoms (display names only-if-exists?) +(import-xlib-function intern-atoms (display names only-if-exists?) "scx_Intern_Atoms") -(import-lambda-definition get-atom-name (display atom) +(import-xlib-function get-atom-name (display atom) "scx_Get_Atom_Name") (define (get-atom-names display atoms) @@ -27,19 +27,19 @@ ;; *** obtain and change window properties**************************** -(import-lambda-definition list-properties (display window) +(import-xlib-function list-properties (display window) "scx_List_Properties") ;; Note: This does not change the list itself. -(import-lambda-definition rotate-window-properties +(import-xlib-function rotate-window-properties (display window properties npositions) "scx_Rotate_Window_Properties") -(import-lambda-definition delete-property (display window property) +(import-xlib-function delete-property (display window property) "scx_Delete_Property") ;; returns a pair (bytes-after . property) or #f -(import-lambda-definition get-window-property +(import-xlib-function get-window-property (display window atom offset length delete? req-type) "scx_Get_Window_Property") @@ -50,7 +50,7 @@ (define-exported-binding "scx-change-property-mode" :change-property-mode) -(import-lambda-definition change-property +(import-xlib-function change-property (display window atom mode property) "scx_Change_Property") @@ -81,12 +81,12 @@ ;; *** manipulate window selection *********************************** -(import-lambda-definition set-selection-owner (display selection owner time) +(import-xlib-function set-selection-owner (display selection owner time) "scx_Set_Selection_Owner") -(import-lambda-definition get-selection-owner (display selection) +(import-xlib-function get-selection-owner (display selection) "scx_Get_Selection_Owner") -(import-lambda-definition convert-selection +(import-xlib-function convert-selection (display selection target property requestor time) "scx_Convert_Selection") diff --git a/scheme/xlib/text.scm b/scheme/xlib/text.scm index 6380f1b..7a4a179 100644 --- a/scheme/xlib/text.scm +++ b/scheme/xlib/text.scm @@ -2,12 +2,12 @@ ;; *** draw image text *********************************************** -(import-lambda-definition draw-image-string (display drawable gc x y string) +(import-xlib-function draw-image-string (display drawable gc x y string) "scx_Draw_Image_String") ;; string has to be a list of (byte1 . byte2) pairs, where byte1 and ;; byte2 are characters -(import-lambda-definition draw-image-string-16 +(import-xlib-function draw-image-string-16 (display drawable gc x y string) "scx_Draw_Image_String_16") @@ -37,10 +37,10 @@ ((make-text-items) '()))) -(import-lambda-definition draw-text (display drawable gc x y items) +(import-xlib-function draw-text (display drawable gc x y items) "scx_Draw_Text") -(import-lambda-definition draw-text-16 (display drawable gc x y items) +(import-xlib-function draw-text-16 (display drawable gc x y items) "scx_Draw_Text_16") ;; *** compute or query text extents ********************************* diff --git a/scheme/xlib/utility.scm b/scheme/xlib/utility.scm index 60c78eb..87974d8 100644 --- a/scheme/xlib/utility.scm +++ b/scheme/xlib/utility.scm @@ -15,14 +15,14 @@ ;; strings. On success a string is returned, otherwise #f. See ;; XGetDefault. -(import-lambda-definition get-default (display program option) +(import-xlib-function get-default (display program option) "scx_Get_Default") ;; resource-manager-string returns the RESOURCE_MANAGER property from ;; the server's root window of screen 0, or #f if no such property ;; exists. See XResourceManagerString. -(import-lambda-definition resource-manager-string (display) +(import-xlib-function resource-manager-string (display) "scx_Resource_Manager_String") ;; parse-geometry parses a string for the standard X format for x, y, diff --git a/scheme/xlib/visual.scm b/scheme/xlib/visual.scm index d7952e0..9722698 100644 --- a/scheme/xlib/visual.scm +++ b/scheme/xlib/visual.scm @@ -40,11 +40,11 @@ ;; template. #f entries in the template are ignored. Use ;; (empty-visual-info) to create a visual-info with all entries set to ;; #f. -(import-lambda-definition get-visual-infos (display template) +(import-xlib-function get-visual-infos (display template) "scx_Get_Visual_Info") ;; returns a visual-info or #f -(import-lambda-definition match-visual-info (display screen-number depth class) +(import-xlib-function match-visual-info (display screen-number depth class) "scx_Match_Visual_Info") (import-lambda-definition visualid-from-visual (visual) diff --git a/scheme/xlib/window.scm b/scheme/xlib/window.scm index 4aa7238..ce394ec 100644 --- a/scheme/xlib/window.scm +++ b/scheme/xlib/window.scm @@ -50,17 +50,17 @@ ;; *** create windows ************************************************ -(import-lambda-definition create-window +(import-xlib-function create-window (display parent x y width height border_width depth class visual attribs) "scx_Create_Window") -(import-lambda-definition create-simple-window +(import-xlib-function create-simple-window (display parent x y width height border_width border background) "scx_Create_Simple_Window") ;; *** change window attributes ************************************** -(import-lambda-definition change-window-attributes (display window attribs) +(import-xlib-function change-window-attributes (display window attribs) "scx_Change_Window_Attributes") (define (make-win-attr-setter attribute) @@ -125,7 +125,7 @@ ((make-window-change-alist) '()))) -(import-lambda-definition configure-window (display window changes) +(import-xlib-function configure-window (display window changes) "scx_Configure_Window") (define (make-win-configurer change) @@ -207,11 +207,11 @@ (define-exported-binding "scx-window-attributes" :window-attributes) -(import-lambda-definition get-window-attributes (display window) +(import-xlib-function get-window-attributes (display window) "scx_Get_Window_Attributes") ;; returns a vector #(root-window x y width height border-width depth) or #f -(import-lambda-definition get-geometry (display drawable) +(import-xlib-function get-geometry (display drawable) "scx_Get_Geometry") (define (make-geometry-getter i) @@ -229,37 +229,37 @@ ;; *** map windows *************************************************** -(import-lambda-definition map-window (display window) +(import-xlib-function map-window (display window) "scx_Map_Window") -(import-lambda-definition map-raised (display window) +(import-xlib-function map-raised (display window) "scx_Map_Raised") -(import-lambda-definition map-subwindows (display window) +(import-xlib-function map-subwindows (display window) "scx_Map_Subwindows") ;; *** unmap windows ************************************************* -(import-lambda-definition unmap-window (display window) +(import-xlib-function unmap-window (display window) "scx_Unmap_Window") -(import-lambda-definition unmap-subwindows (display window) +(import-xlib-function unmap-subwindows (display window) "scx_Unmap_Subwindows") ;; *** destroy windows *********************************************** -(import-lambda-definition destroy-window (display window) +(import-xlib-function destroy-window (display window) "scx_Destroy_Window") -(import-lambda-definition destroy-subwindows (display window) +(import-xlib-function destroy-subwindows (display window) "scx_Destroy_Subwindows") ;; *** change window stacking order ********************************** -(import-lambda-definition raise-window (display window) +(import-xlib-function raise-window (display window) "scx_Raise_Window") -(import-lambda-definition lower-window (display window) +(import-xlib-function lower-window (display window) "scx_Lower_Window") (define-enumerated-type circulate-direction :circulate-direction @@ -269,7 +269,7 @@ (define-exported-binding "scx-circulate-direction" :circulate-direction) -(import-lambda-definition circulate-subwindows (display window direction) +(import-xlib-function circulate-subwindows (display window direction) "scx_Circulate_Subwindows") (define (circulate-subwindows-up display window) @@ -278,22 +278,22 @@ (define (circulate-subwindows-down display window) (circulate-subwindows display window (circulate-direction lower-highest))) -(import-lambda-definition restack-windows (display windows) +(import-xlib-function restack-windows (display windows) "scx_Restack_Windows") ;; *** clear area or window ****************************************** -(import-lambda-definition clear-area +(import-xlib-function clear-area (display window x y width height exposures?) "scx_Clear_Area") -(import-lambda-definition clear-window (display window) +(import-xlib-function clear-window (display window) "scx_Clear_Window") ;; *** query window tree information ********************************* ;; returns a list (root-window parent-window children) or #f -(import-lambda-definition query-tree (display window) +(import-xlib-function query-tree (display window) "scx_Query_Tree") (define (window-root display window) @@ -311,13 +311,13 @@ ;; *** translate window coordinates ********************************** ;; returns a list (dest-x dest-y child) or #f -(import-lambda-definition translate-coordinates +(import-xlib-function translate-coordinates (display src-w dest-w src-x src-y) "scx_Translate_Coordinates") ;; *** get pointer coordinates *************************************** -(import-lambda-definition %query-pointer (display window) +(import-xlib-function %query-pointer (display window) "scx_Query_Pointer") (define (query-pointer-root display) @@ -341,7 +341,8 @@ ;; *** convenience functions ***************************************** (define (window-exists? dpy window) - (let ((pe (use-x-error-warnings!))) + (display-sync dpy #f) + (let ((before (use-x-error-warnings! dpy #t))) (let ((result (call-with-current-continuation (lambda (return) @@ -351,5 +352,5 @@ (query-tree dpy window) (display-sync dpy #f) #t)))))) - (set-error-handler! pe) + (if (not before) (use-x-error-warnings! dpy #f)) result))) diff --git a/scheme/xlib/wm.scm b/scheme/xlib/wm.scm index 94eb858..d33a29f 100644 --- a/scheme/xlib/wm.scm +++ b/scheme/xlib/wm.scm @@ -7,7 +7,7 @@ ;; position in the hierarchy, and inserts it as the child of the ;; specified parent. See XReparentWindow. -(import-lambda-definition reparent-window (display window parent x y) +(import-xlib-function reparent-window (display window parent x y) "scx_Reparent_Window") ;; *** control colormaps ********************************************* @@ -15,20 +15,20 @@ ;; install-colormap function installs the specified colormap for ;; its associated screen. See XInstallColormap. -(import-lambda-definition install-colormap (display colormap) +(import-xlib-function install-colormap (display colormap) "scx_Install_Colormap") ;; uninstall-colormap removes the specified colormap from the required ;; list for its screen. See XUninstallColormap. -(import-lambda-definition uninstall-colormap (display colormap) +(import-xlib-function uninstall-colormap (display colormap) "scx_Uninstall_Colormap") ;; list-installed-colormaps function returns a list of the currently ;; installed colormaps for the screen of the specified window. See ;; XListInstalledColormaps. -(import-lambda-definition list-installed-colormaps (display window) +(import-xlib-function list-installed-colormaps (display window) "scx_List_Installed_Colormaps") ;; *** control input focus ******************************************* @@ -36,7 +36,7 @@ ;; set-input-focus function changes the input focus and the ;; last-focus-change time. See XSetInputFocus. -(import-lambda-definition set-input-focus (display window revert-to time) +(import-xlib-function set-input-focus (display window revert-to time) "scx_Set_Input_Focus") (define-enumerated-type revert-to :revert-to @@ -49,7 +49,7 @@ ;; get-input-focus returns the current focus window and the current focus ;; state (revert-to) as a pair. See XGetInputFocus. -(import-lambda-definition get-input-focus (display) +(import-xlib-function get-input-focus (display) "scx_Get_Input_Focus") (define (get-input-focus-window display) @@ -57,7 +57,7 @@ ;; *** move pointer ************************************************** -(import-lambda-definition general-warp-pointer +(import-xlib-function general-warp-pointer (display src dest src-x src-y src-width src-height dest-x dest-y) "scx_Warp_Pointer") @@ -87,7 +87,7 @@ ;; possible. The optional percent argument specifies the volume in a ;; range from -100 to 100. 0 is the default value. See XBell. -(import-lambda-definition %bell (display percent) +(import-xlib-function %bell (display percent) "scx_Bell") (define (bell display . percent) @@ -103,7 +103,7 @@ ;; set-access-control either enables or disables the use of the access ;; control list at each connection setup. See XSetAccessControl. -(import-lambda-definition set-access-control (display enable?) +(import-xlib-function set-access-control (display enable?) "scx_Set_Access_Control") ;; *** change a client's save set ************************************ @@ -114,7 +114,7 @@ ;; BadMatch error results. mode is one of 'insert or 'delete. See ;; XChangeSaveSet. -(import-lambda-definition change-save-set (display window mode) +(import-xlib-function change-save-set (display window mode) "scx_Change_Save_Set") (define-enumerated-type save-set :save-set @@ -135,10 +135,10 @@ (define-exported-binding "scx-close-down-mode" :close-down-mode) -(import-lambda-definition set-close-down-mode (display mode) +(import-xlib-function set-close-down-mode (display mode) "scx_Set_Close_Down_Mode") -(import-lambda-definition kill-client (display xid) +(import-xlib-function kill-client (display xid) "scx_Kill_Client") ;; *** manipulate pointer settings *********************************** @@ -147,7 +147,7 @@ ;; element the logical button number for the physical button i+1. See ;; XGetPointerMapping. -(import-lambda-definition get-pointer-mapping (display) +(import-xlib-function get-pointer-mapping (display) "scx_Get_Pointer_Mapping") ;; set-pointer-mapping sets the mapping of the pointer. mapping must @@ -156,7 +156,7 @@ ;; down state, then #f is returned and the mapping is not changed, #t ;; otherwise. See XSetPointerMapping. -(import-lambda-definition set-pointer-mapping (display mapping) +(import-xlib-function set-pointer-mapping (display mapping) "scx_Set_Pointer_Mapping") ;; TODO: there is a lot more... diff --git a/scheme/xlib/xlib-interfaces.scm b/scheme/xlib/xlib-interfaces.scm index a026064..dbb0a81 100644 --- a/scheme/xlib/xlib-interfaces.scm +++ b/scheme/xlib/xlib-interfaces.scm @@ -21,6 +21,7 @@ display:bitmap-unit display:bitmap-pad display:bitmap-bit-order display:vendor-release display:queue-length display:name display:default-screen display:screens display-message-inport + display:error-queue (byte-order :syntax) byte-order? (bit-order :syntax) bit-order? @@ -178,14 +179,11 @@ (error-code :syntax) error-code? use-x-error-warnings! - use-x-error-queue! x-error-queue? x-error-queue:this empty-x-error-queue? next-x-error-queue - ((set-error-handler!) (proc ((proc (:display :x-error) :value)) - (proc (:display :x-error) :value))) get-error-text get-error-database-text