- replaced client icons with a pager for move-wm
This commit is contained in:
parent
f26844397b
commit
d06743740e
|
@ -1,86 +0,0 @@
|
||||||
(define-record-type icon :icon
|
|
||||||
(make-icon wm client window)
|
|
||||||
icon?
|
|
||||||
(wm icon:wm)
|
|
||||||
(client icon:client)
|
|
||||||
(window icon:window))
|
|
||||||
|
|
||||||
(define (create-icon wm client rect)
|
|
||||||
(let* ((dpy (wm:dpy wm))
|
|
||||||
(window (create-simple-window dpy (wm:window wm)
|
|
||||||
(rectangle:x rect) (rectangle:y rect)
|
|
||||||
(rectangle:width rect)
|
|
||||||
(rectangle:height rect)
|
|
||||||
0
|
|
||||||
(black-pixel dpy) (white-pixel dpy)))
|
|
||||||
(gc (create-gc dpy window
|
|
||||||
(make-gc-value-alist
|
|
||||||
(foreground (black-pixel dpy))
|
|
||||||
(background (white-pixel dpy))))))
|
|
||||||
(spawn*
|
|
||||||
(list 'move-wm-icon wm client window)
|
|
||||||
(lambda (release)
|
|
||||||
(call-with-current-continuation
|
|
||||||
(lambda (exit)
|
|
||||||
(call-with-event-channel
|
|
||||||
dpy window (event-mask exposure
|
|
||||||
structure-notify
|
|
||||||
button-press)
|
|
||||||
(lambda (event-channel)
|
|
||||||
(release)
|
|
||||||
(let loop ()
|
|
||||||
(let ((xevent (receive event-channel)))
|
|
||||||
(cond
|
|
||||||
((destroy-window-event? xevent) (exit 'destroyed))
|
|
||||||
|
|
||||||
((expose-event? xevent)
|
|
||||||
(if (= 0 (expose-event-count xevent))
|
|
||||||
(draw-icon dpy window gc client)))
|
|
||||||
|
|
||||||
((and (button-event? xevent)
|
|
||||||
(eq? (event-type button-press)
|
|
||||||
(button-event-type xevent)))
|
|
||||||
(send (wm:internal-out-channel wm)
|
|
||||||
(list 'normalize-client client))
|
|
||||||
(exit 'normalized)))
|
|
||||||
(loop)))))))
|
|
||||||
(free-gc dpy gc)))
|
|
||||||
(make-icon wm client window)))
|
|
||||||
|
|
||||||
(define (map-icon icon)
|
|
||||||
(map-window (wm:dpy (icon:wm icon)) (icon:window icon)))
|
|
||||||
|
|
||||||
(define (destroy-icon icon)
|
|
||||||
(destroy-window (wm:dpy (icon:wm icon)) (icon:window icon)))
|
|
||||||
|
|
||||||
(define (draw-icon dpy window gc client)
|
|
||||||
(let ((title (client-name dpy client)) ;; or WM_ICON_NAME ??
|
|
||||||
(r (clip-rectangle dpy window)))
|
|
||||||
(draw-image-string dpy window gc 2 14 title)))
|
|
||||||
|
|
||||||
(define (find-icon-rect wm-rect icons)
|
|
||||||
(let* ((icon-w 200)
|
|
||||||
(icon-h 18)
|
|
||||||
(xs (iota (quotient (rectangle:width wm-rect) icon-w)))
|
|
||||||
(ys (reverse (iota (quotient (rectangle:height wm-rect) icon-h))))
|
|
||||||
(all (flatten (map (lambda (yi)
|
|
||||||
(map (lambda (xi)
|
|
||||||
(make-rectangle (* xi icon-w)
|
|
||||||
(* yi icon-h)
|
|
||||||
icon-w icon-h))
|
|
||||||
xs))
|
|
||||||
ys)))
|
|
||||||
(icon-rects (map (lambda (i)
|
|
||||||
(window-rectangle (wm:dpy (icon:wm i))
|
|
||||||
(icon:window i)))
|
|
||||||
icons))
|
|
||||||
(free (filter (lambda (r)
|
|
||||||
(not (any (lambda (ir)
|
|
||||||
(rectangles-overlap? r ir))
|
|
||||||
icon-rects)))
|
|
||||||
all)))
|
|
||||||
(if (null? free)
|
|
||||||
(if (null? all)
|
|
||||||
(make-rectangle 0 0 icon-w icon-h)
|
|
||||||
(car all))
|
|
||||||
(car free))))
|
|
Loading…
Reference in New Issue