table)))
(define display/cached-atoms-tables
+ ;; This table needs replacing. It holds interned symbols strongly!
(let ((table (make-weak-eq-hash-table)))
(lambda (display)
- (or (hash-table/get table display #f)
- (let ((result
- (cons (make-strong-eq-hash-table)
- (make-strong-eqv-hash-table))))
- (hash-table/put! table display result)
- result)))))
+ (let ((key (intern (alien/address-string display))))
+ (or (hash-table/get table key #f)
+ (let ((result (cons (make-strong-eq-hash-table)
+ (make-strong-eqv-hash-table))))
+ (hash-table/put! table key result)
+ result))))))
\f
;;;; Properties
#t)))
(define display/selection-records
+ ;; This table needs replacing. It holds interned symbols strongly.
(let ((table (make-weak-eq-hash-table)))
(lambda (display)
- (or (hash-table/get table display #f)
- (let ((result (make-strong-eq-hash-table)))
- (hash-table/put! table display result)
- result)))))
+ (let ((key (intern (alien/address-string display))))
+ (or (hash-table/get table key #f)
+ (let ((result (make-strong-eq-hash-table)))
+ (hash-table/put! table key result)
+ result))))))
;;; In the next two procedures, we must allow TIME to be 0, even
;;; though the ICCCM forbids this, because existing clients use that
(case format
((8)
(guarantee-string data 'x-change-property)
- data)
+ (prop-data-8->bytes.length data))
((16)
(guarantee-vector data 'x-change-property)
(prop-data-16->bytes.length data))
(car bytes.length) (cdr bytes.length))))
(free (car bytes.length))
(if (not (zero? code))
- (error "XChangeProperty failed:" property))))
+ (error "XChangeProperty failed:" property))
+ code))
(define (prop-data-32->bytes.length vector)
(let* ((nitems (vector-length vector))
;;; Guarantors
(declare (integrate-operator guarantee-Atom))
-(define guarantee-Atom guarantee-exact-positive-integer)
+(define guarantee-Atom guarantee-exact-nonnegative-integer)
(declare (integrate-operator guarantee-Window))
(define guarantee-Window guarantee-exact-positive-integer)