From: Philippe Brochard Date: Fri, 13 Dec 2013 20:52:35 +0000 (+0100) Subject: Set expose windows and gcontexts to nil when done in expose-mode X-Git-Url: https://repo.or.cz/w/clfswm.git/commitdiff_plain/51f9f1574d42c723e55577fbc4a5f858e2af1d14 Set expose windows and gcontexts to nil when done in expose-mode --- diff --git a/src/clfswm-expose-mode.lisp b/src/clfswm-expose-mode.lisp index 22c52f8..31fbee1 100644 --- a/src/clfswm-expose-mode.lisp +++ b/src/clfswm-expose-mode.lisp @@ -88,6 +88,7 @@ (expose-child-string ex-child)) (copy-pixmap-buffer window gc))))) + (defun expose-create-window (ex-child) (let ((child (expose-child-child ex-child))) (with-current-child (child) @@ -182,8 +183,8 @@ (multiple-value-bind (letters return) (query-string "Which child ?") (let ((ex-child (case return - (:return (expose-find-child-from-letters letters)) - (:click *expose-selected-child*)))) + (:return (expose-find-child-from-letters letters)) + (:click *expose-selected-child*)))) (when ex-child (expose-child-child ex-child)))))) @@ -195,7 +196,9 @@ (awhen (expose-child-gc ex-child) (xlib:free-gcontext it)) (awhen (expose-child-window ex-child) - (xlib:destroy-window it))) + (xlib:destroy-window it)) + (setf (expose-child-gc ex-child) nil + (expose-child-window ex-child) nil)) (when *expose-font* (xlib:close-font *expose-font*)) (expose-unpresent-windows)) diff --git a/src/clfswm-fastswitch-mode.lisp b/src/clfswm-fastswitch-mode.lisp index 310cb89..39c1b5d 100644 --- a/src/clfswm-fastswitch-mode.lisp +++ b/src/clfswm-fastswitch-mode.lisp @@ -61,7 +61,7 @@ (xlib:draw-glyphs *pixmap-buffer* *fastswitch-gc* (* (xlib:max-char-width *fastswitch-font*) posx) placey - (child-fullname (expose-child-child ex-child))) + (ensure-printable (child-fullname (expose-child-child ex-child)))) (incf posx (1+ (length (child-fullname (expose-child-child ex-child)))))) posx)) diff --git a/src/clfswm-internal.lisp b/src/clfswm-internal.lisp index b322c38..01807cf 100644 --- a/src/clfswm-internal.lisp +++ b/src/clfswm-internal.lisp @@ -252,10 +252,10 @@ (defgeneric set-child-name (child name)) (defmethod set-child-name ((child xlib:window) name) - (setf (xlib:wm-name child) name)) + (setf (xlib:wm-name child) (ensure-printable name))) (defmethod set-child-name ((child frame) name) - (setf (frame-name child) name)) + (setf (frame-name child) (ensure-printable name))) (defmethod set-child-name (child name) (declare (ignore child name))) @@ -268,14 +268,12 @@ (defgeneric child-fullname (child)) (defmethod child-fullname ((child xlib:window)) - (ensure-printable - (format nil "~A (~A)" (or (xlib:wm-name child) "?") (or (xlib:get-wm-class child) "?")))) + (format nil "~A (~A)" (or (xlib:wm-name child) "?") (or (xlib:get-wm-class child) "?"))) (defmethod child-fullname ((child frame)) - (ensure-printable - (aif (frame-name child) - (format nil "~A (Frame ~A)" it (frame-number child)) - (format nil "Frame ~A" (frame-number child))))) + (aif (frame-name child) + (format nil "~A (Frame ~A)" it (frame-number child)) + (format nil "Frame ~A" (frame-number child)))) (defmethod child-fullname (child) (declare (ignore child)) diff --git a/src/xlib-util.lisp b/src/xlib-util.lisp index 5d8cb0f..dbe4c2a 100644 --- a/src/xlib-util.lisp +++ b/src/xlib-util.lisp @@ -1003,6 +1003,7 @@ they should be windows. So use this function to make a window out of them." t)))) + (defun copy-pixmap-buffer (window gc) (xlib:copy-area *pixmap-buffer* gc 0 0 (x-drawable-width window) (x-drawable-height window)