From 223b8f75a512cf7705d2d69c3a4a9f0168278aae Mon Sep 17 00:00:00 2001 From: Philippe Brochard Date: Tue, 30 Jul 2013 18:50:01 +0200 Subject: [PATCH] Use a global counter for expose letters instead of a sort based on window Xid. --- src/clfswm-circulate-mode.lisp | 3 ++- src/clfswm-expose-mode.lisp | 33 ++++++++++++--------------------- src/clfswm.lisp | 4 +++- src/package.lisp | 3 +++ 4 files changed, 20 insertions(+), 23 deletions(-) diff --git a/src/clfswm-circulate-mode.lisp b/src/clfswm-circulate-mode.lisp index 6d8a765..8f1a1bd 100644 --- a/src/clfswm-circulate-mode.lisp +++ b/src/clfswm-circulate-mode.lisp @@ -44,7 +44,8 @@ (len (length text))) (xlib:draw-glyphs *pixmap-buffer* *circulate-gc* (truncate (/ (- *circulate-width* (* (xlib:max-char-width *circulate-font*) len)) 2)) - (truncate (/ (+ *circulate-height* (- (xlib:font-ascent *circulate-font*) (xlib:font-descent *circulate-font*))) 2)) + (truncate (/ (+ *circulate-height* (- (xlib:font-ascent *circulate-font*) + (xlib:font-descent *circulate-font*))) 2)) text)) (copy-pixmap-buffer *circulate-window* *circulate-gc*)) diff --git a/src/clfswm-expose-mode.lisp b/src/clfswm-expose-mode.lisp index fbbb7d0..f4354ba 100644 --- a/src/clfswm-expose-mode.lisp +++ b/src/clfswm-expose-mode.lisp @@ -26,7 +26,6 @@ (in-package :clfswm) (defparameter *expose-font* nil) -(defparameter *expose-child-list* nil) (defparameter *expose-selected-child* nil) (defstruct expose-child child key window gc string) @@ -50,25 +49,18 @@ (throw 'exit-expose-loop t)) - - -(defun expose-sort (predicate type) - (lambda (x y) - (funcall predicate (funcall type x) (funcall type y)))) - (defun expose-associate-keys () - (let* ((acc nil) - (n 0) - (win-list (sort (get-all-windows) (expose-sort #'< #'xlib:window-id))) - (frame-list (sort (get-all-frames) (expose-sort #'< #'frame-number)))) - (loop for c in win-list - do (push (make-expose-child :child c :key (number->letter n)) acc) - (incf n)) - (loop for c in frame-list - do (unless (child-equal-p c *root-frame*) - (push (make-expose-child :child c :key (number->letter n)) acc) - (incf n))) - (nreverse acc))) + (let* ((all nil) + (new nil)) + (with-all-children-reversed (*root-frame* child) + (unless (child-equal-p child *root-frame*) + (push child all) + (unless (member child *expose-child-list* :test #'child-equal-p :key #'expose-child-child) + (push (make-expose-child :child child :key (number->letter *expose-current-number*)) new) + (incf *expose-current-number*)))) + (append (remove-if-not (lambda (x) (member x all :test #'child-equal-p)) *expose-child-list* + :key #'expose-child-child) + (nreverse new)))) @@ -206,8 +198,7 @@ (xlib:destroy-window it))) (when *expose-font* (xlib:close-font *expose-font*)) - (expose-unpresent-windows) - (setf *expose-child-list* nil)) + (expose-unpresent-windows)) (defun expose-focus-child (child) (let ((parent (typecase child diff --git a/src/clfswm.lisp b/src/clfswm.lisp index cbecb5e..090decd 100644 --- a/src/clfswm.lisp +++ b/src/clfswm.lisp @@ -203,7 +203,9 @@ :depth (xlib:screen-root-depth *screen*) :drawable *root*) *in-second-mode* nil - *x-error-count* 0) + *x-error-count* 0 + *expose-current-number* 0 + *expose-child-list* nil) (store-root-background) (init-modifier-list) (xgrab-init-pointer) diff --git a/src/package.lisp b/src/package.lisp index f45bcc1..5149953 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -81,6 +81,9 @@ It is particulary useful with CLISP/MIT-CLX.") (defparameter *background-image* nil) (defparameter *background-gc* nil) +(defparameter *expose-current-number* 0) +(defparameter *expose-child-list* nil) + (defconfig *loop-timeout* 1 nil "Maximum time (in seconds) to wait before calling *loop-hook*") -- 2.11.4.GIT