Re: dynamic viewports?



Hi Jeremy,

I just added all three (new-viewport, viewport-windows and
viewport-boundary-mode dynamic) to trunk.

What is currently needed:

- fix glitches (if any known)
- proper entries in man/sawfish.texi (important)

Thanks for your hard work,
Chris

Am Sonntag, den 26.07.2009, 15:14 -0500 schrieb Jeremy Hankins:
> Christopher Roy Bratusek <zanghar freenet de> writes:
> 
> > P.S.: Do you think you can finish new-viewport? Would be nice :)
> 
> Sure; here you go.  :)
> 
> -------------------------
> diff --git a/lisp/sawfish/wm/ext/match-window.jl b/lisp/sawfish/wm/ext/match-window.jl
> index 4a7ea50..291e8f8 100644
> --- a/lisp/sawfish/wm/ext/match-window.jl
> +++ b/lisp/sawfish/wm/ext/match-window.jl
> @@ -77,7 +77,9 @@
>         (depth (number -16 16))
>         (placement-weight number)
>         (fixed-position boolean)
> -       (maximized (choice all vertical horizontal)))
> +       (maximized (choice all vertical horizontal))
> +       (new-workspace boolean)
> +       (new-viewport boolean))
>        (focus ,(_ "Focus")
>         (raise-on-focus boolean)
>         (focus-when-mapped boolean)
> @@ -109,8 +111,7 @@
>         (auto-gravity boolean)
>         (shade-hover boolean)
>         (transients-above (choice all parents none))
> -       (ignore-stacking-requests boolean)
> -       (new-workspace boolean))))
> +       (ignore-stacking-requests boolean))))
>  
>    ;; alist of (PROPERTY . FEATURE) mapping properties to the lisp
>    ;; libraries implementing them
> @@ -395,10 +396,40 @@
>     (lambda (w prop value)
>       (declare (unused prop))
>       (when value
> -       (let ((space (car (workspace-limits))))
> -         (while (not (workspace-empty-p space))
> -	   (setq space (1+ space)))
> -	     (set-window-workspaces w (list space))))))
> +       (unless (window-get w 'placed)
> +         (let ((space (car (workspace-limits))))
> +           (while (not (workspace-empty-p space))
> +             (setq space (1+ space)))
> +           (set-window-workspaces w (list space)))))))
> +
> +  (define-match-window-setter 'new-viewport
> +    (lambda (w prop value)
> +      (declare (unused prop))
> +      (when value
> +        (unless (window-get w 'placed)
> +          (let ((row 0)
> +                (col 0)
> +                (nomatch t))
> +            (while (and nomatch (< row (cdr viewport-dimensions)))
> +              (setq col 0)
> +              (while (and nomatch (< col (car viewport-dimensions)))
> +                (if (null (viewport-windows col row nil t))
> +                    (setq nomatch nil)
> +                  (setq col (1+ col))))
> +              (if nomatch
> +                  (setq row (1+ row))))
> +            (when nomatch
> +              (let ((cols (car viewport-dimensions))
> +                    (rows (cdr viewport-dimensions)))
> +                (if (<= cols rows)
> +                    (setq viewport-dimensions (cons (1+ cols) rows)
> +                          col cols
> +                          row 0)
> +                  (setq viewport-dimensions (cons cols (1+ rows))
> +                        col 0
> +                        row rows))))
> +            (set-screen-viewport col row)
> +            (set-window-viewport w col row))))))
>  
>    (define-match-window-setter 'fullscreen-xinerama
>     (lambda (w prop value)
> diff --git a/lisp/sawfish/wm/viewport.jl b/lisp/sawfish/wm/viewport.jl
> index 43e3e14..674bb58 100644
> --- a/lisp/sawfish/wm/viewport.jl
> +++ b/lisp/sawfish/wm/viewport.jl
> @@ -34,7 +34,8 @@
>  	    move-window-viewport
>  	    window-viewport
>  	    window-absolute-position
> -	    set-number-of-viewports)
> +	    set-number-of-viewports
> +            viewport-windows)
>  
>      (open rep
>  	  rep.system
> @@ -233,6 +234,35 @@ The scrolling makes a number of increments equal to `scroll-viewport-steps'."
>      (setq viewport-dimensions (cons width height))
>      (viewport-size-changed))
>  
> +  (define (viewport-windows #!optional vp-col vp-row workspace
> +                            exclude-sticky exclude-iconified)
> +    "Provide a list of windows that are mapped to the specified
> +viewport."
> +    (let* ((cur-vp (screen-viewport))
> +           (col (or vp-col (car cur-vp)))
> +           (row (or vp-row (cdr cur-vp)))
> +           (ws (or workspace current-workspace))
> +           (width (screen-width))
> +           (height (screen-height))
> +           (left (+ (- viewport-x-offset) (* col width)))
> +           (right (+ left (1- width)))
> +           (top (+ (- viewport-y-offset) (* row height)))
> +           (bottom (+ top (1- height))))
> +      (filter-windows (lambda (w)
> +                        (let ((pos (window-position w))
> +                              (dims (window-frame-dimensions w)))
> +                          (and (window-mapped-p w)
> +                               (not (window-get w 'ignored))
> +                               (if exclude-sticky
> +                                   (window-in-workspace-p w ws)
> +                                 (window-appears-in-workspace-p w ws))
> +                               (not (and exclude-iconified
> +                                         (window-get w 'iconified)))
> +                               (not (or (<= (+ (car pos) (car dims)) left)
> +                                        (<= (+ (cdr pos) (cdr dims)) top)
> +                                        (>= (car pos) right)
> +                                        (>= (cdr pos) bottom)))))))))
> +
>  ;; commands
>  
>    (define (activate-viewport x y)
> -------------------------
> 




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]