[clfswm-cvs] r252 - in clfswm: . src
Philippe Brochard
pbrochard at common-lisp.net
Mon Aug 17 20:58:59 UTC 2009
Author: pbrochard
Date: Mon Aug 17 16:58:58 2009
New Revision: 252
Log:
tile-layout, tile-horizontal-layout: Keep child order and don't make unnecessary child movement. One-column-layout, One-line-layout: New layouts.
Modified:
clfswm/ChangeLog
clfswm/src/clfswm-layout.lisp
clfswm/src/tools.lisp
clfswm/src/xlib-util.lisp
Modified: clfswm/ChangeLog
==============================================================================
--- clfswm/ChangeLog (original)
+++ clfswm/ChangeLog Mon Aug 17 16:58:58 2009
@@ -1,3 +1,9 @@
+2009-07-29 Philippe Brochard <pbrochard at common-lisp.net>
+
+ * src/clfswm-layout.lisp (tile-layout, tile-horizontal-layout):
+ Keep child order and don't make unnecessary child movement.
+ (one-column-layout, one-line-layout): New layouts.
+
2009-06-29 Philippe Brochard <pbrochard at common-lisp.net>
* contrib/cd-player.lisp: New file to handle the CD player.
Modified: clfswm/src/clfswm-layout.lisp
==============================================================================
--- clfswm/src/clfswm-layout.lisp (original)
+++ clfswm/src/clfswm-layout.lisp Mon Aug 17 16:58:58 2009
@@ -186,11 +186,28 @@
;;; Tile layout
+(defun set-layout-managed-children ()
+ (when (frame-p *current-child*)
+ (setf (frame-data-slot *current-child* :layout-managed-children)
+ (copy-list (get-managed-child *current-child*)))))
+
+(defun update-layout-managed-children (child parent)
+ (let ((managed-children (frame-data-slot parent :layout-managed-children))
+ (managed-in-parent (get-managed-child parent)))
+ (dolist (ch managed-in-parent)
+ (unless (member ch managed-children)
+ (setf managed-children (append managed-children (list child)))))
+ (setf managed-children (remove-if-not (lambda (x)
+ (member x managed-in-parent :test #'equal))
+ managed-children))
+ (setf (frame-data-slot parent :layout-managed-children) managed-children)
+ managed-children))
+
(defgeneric tile-layout (child parent)
(:documentation "Tile child in its frame (vertical)"))
(defmethod tile-layout (child parent)
- (let* ((managed-children (get-managed-child parent))
+ (let* ((managed-children (update-layout-managed-children child parent))
(pos (position child managed-children))
(len (length managed-children))
(n (ceiling (sqrt len)))
@@ -203,14 +220,17 @@
(defun set-tile-layout ()
"Tile child in its frame (vertical)"
+ (set-layout-managed-children)
(set-layout #'tile-layout))
+
+;; Horizontal tiling layout
(defgeneric tile-horizontal-layout (child parent)
(:documentation "Tile child in its frame (horizontal)"))
(defmethod tile-horizontal-layout (child parent)
- (let* ((managed-children (get-managed-child parent))
+ (let* ((managed-children (update-layout-managed-children child parent))
(pos (position child managed-children))
(len (length managed-children))
(n (ceiling (sqrt len)))
@@ -223,8 +243,54 @@
(defun set-tile-horizontal-layout ()
"Tile child in its frame (horizontal)"
+ (set-layout-managed-children)
(set-layout #'tile-horizontal-layout))
+
+
+;; One column layout
+(defgeneric one-column-layout (child parent)
+ (:documentation "One column layout"))
+
+(defmethod one-column-layout (child parent)
+ (let* ((managed-children (update-layout-managed-children child parent))
+ (pos (position child managed-children))
+ (len (length managed-children))
+ (dy (/ (frame-rh parent) len)))
+ (values (round (+ (frame-rx parent) 1))
+ (round (+ (frame-ry parent) (* pos dy) 1))
+ (round (- (frame-rw parent) 2))
+ (round (- dy 2)))))
+
+(defun set-one-column-layout ()
+ "One column layout"
+ (set-layout-managed-children)
+ (set-layout #'one-column-layout))
+
+
+;; One line layout
+(defgeneric one-line-layout (child parent)
+ (:documentation "One line layout"))
+
+(defmethod one-line-layout (child parent)
+ (let* ((managed-children (update-layout-managed-children child parent))
+ (pos (position child managed-children))
+ (len (length managed-children))
+ (dx (/ (frame-rw parent) len)))
+ (values (round (+ (frame-rx parent) (* pos dx) 1))
+ (round (+ (frame-ry parent) 1))
+ (round (- dx 2))
+ (round (- (frame-rh parent) 2)))))
+
+(defun set-one-line-layout ()
+ "One line layout"
+ (set-layout-managed-children)
+ (set-layout #'one-line-layout))
+
+
+
+
+
;;; Space layout
(defun tile-space-layout (child parent)
"Tile Space: tile child in its frame leaving spaces between them"
@@ -255,6 +321,8 @@
(register-layout-sub-menu 'frame-tile-layout-menu "Frame tile layout menu"
'(("v" set-tile-layout)
("h" set-tile-horizontal-layout)
+ ("c" set-one-column-layout)
+ ("l" set-one-line-layout)
("s" set-tile-space-layout)))
Modified: clfswm/src/tools.lisp
==============================================================================
--- clfswm/src/tools.lisp (original)
+++ clfswm/src/tools.lisp Mon Aug 17 16:58:58 2009
@@ -546,7 +546,7 @@
#+lucid (apply #'lcl:run-program prog :wait wait :arguments args opts)
#+sbcl (apply #'sb-ext:run-program prog args :wait wait :output *standard-output* opts)
#+ecl (apply #'ext:run-program prog args opts)
- #+ccl (applay #'ccl:run-program prog args opts :wait wait)
+ #+ccl (apply #'ccl:run-program prog args opts :wait wait)
#-(or allegro clisp cmu gcl liquid lispworks lucid sbcl ecl ccl)
(error 'not-implemented :proc (list 'run-prog prog opts)))
Modified: clfswm/src/xlib-util.lisp
==============================================================================
--- clfswm/src/xlib-util.lisp (original)
+++ clfswm/src/xlib-util.lisp Mon Aug 17 16:58:58 2009
@@ -70,7 +70,7 @@
, at body)
((or xlib:match-error xlib:window-error xlib:drawable-error) (c)
(declare (ignore c)))))
- ;;(dbg c ',body))))
+ ;;(dbg c ',body))))
More information about the clfswm-cvs
mailing list