Re: [Sawfish] Patch to save memory and speed up StyleTab |
[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]
Hi, On Thu, 10 Apr 2014 01:58:24 +0200 wrote fuchur <flohtransporter@xxxxxxxxx>: >Hi, > >On Wed, 9 Apr 2014 17:04:11 +0200 >wrote Christopher Roy Bratusek <nano@xxxxxxxxxxxxx>: > >>on a side-note: Tiling + Tabbing does not work well together. Not that >>it actually should be a huge issue (how many will do both at the same >>time?), but just wanted to inform you all. > >Yes that correct. Here i have a xinerama setup with two monitors and >today i play first time with tiling and i have only "chaos" on my >desktop: > >Windows over docks (panel, gkrellm). >Windows half over xinerama head (from left to right and top to bottom). >Windows disappear, and i don't get them back. >Windows from tray appears on the desktop (goldendict). >Different placement window mode not overwrite (interactively, under >pointer ...) >Errors in my ~/.xsession-errors by keypress: > > >Lisp backtrace: >#2 ws-inc-max ... >#1 change-max-windows ... >#0 call-command ... > >Sawfish error: >Bad argument: #<closure ws-inc-max @ sawfish.wm.tile.tall>, t, 1 > > >Lisp backtrace: >#2 eval ... >#1 user-eval ... >#0 call-command ... > >Sawfish error: >Unbound variable: increase-cols > > > >No docs. That is that what i found (News) and i put this in my ~.sawfish/rc: > > >(require 'sawfish.wm.tile.tile) >(tall-tiling 0 #:width 1.75 #:top 0 #:bottom 0 #:gap 3 #:max 3 #:right nil #:resize t) >(col-tiling 0 #:top 0 #:bottom 0 #:gap 3 #:cols 3 #:resize t) >(bind-keys global-keymap >"M-KP_Subtract" 'increase-max-windows >"M-KP_Add" 'decrease-max-windows >"Super-KP_Subtract" 'increase-cols >"Super-KP_Add" 'decrease-cols >"C-KP_Subtract" 'tall-rotate-right >"C-KP_Add" 'tall-rotate-left >"C-F11" 'next-tiling) > >For me, tab support is not the biggest problem for tiling. > > Two patches to add tabsupport in the part from tiling which working here. Also rename "tab-group-window-index" to "tab-group-windows" -- Regards, Fuchur GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53 C116 E5BC 70D5 B8D7 B2B0
diff -urNad lisp.orgi/sawfish/wm/tabs/tab.jl lisp/sawfish/wm/tabs/tab.jl --- lisp.orgi/sawfish/wm/tabs/tab.jl +++ lisp/sawfish/wm/tabs/tab.jl @@ -202,10 +202,10 @@ (when (net-wm-window-type-normal-p win) (if marked-window (progn - (setq marked-window (tab-group-window-index (car marked-window))) + (setq marked-window (tab-group-windows (car marked-window))) (tab-window-add-to-tabgroup win)) (default-cursor (get-cursor marked-cursor-shape)) - (setq marked-window (tab-group-window-index win)) + (setq marked-window (tab-group-windows win)) (mapcar (lambda (w) (window-put w 'marked t) (emit-marked-hook w)) marked-window)))) diff -urNad lisp.orgi/sawfish/wm/tabs/tabgroup.jl lisp/sawfish/wm/tabs/tabgroup.jl --- lisp.orgi/sawfish/wm/tabs/tabgroup.jl +++ lisp/sawfish/wm/tabs/tabgroup.jl @@ -31,8 +31,10 @@ tab-find-window tab-rank tab-group-window-list - tab-group-window-index - tab-group-window) + tab-group-windows + tab-group-windows-stacking-order + tab-group-window + tab-move-resize-lock) (open rep rep.system @@ -57,6 +59,7 @@ (define oldgroup nil) (define tab-groups nil) (define tab-refresh-lock t) + (define tab-move-resize-lock nil) (define release-window t) (define last-unmap-id nil) (define in-tab-group-name nil) @@ -132,12 +135,22 @@ (t (loop (+ index 1)))))) - (define (tab-group-window-index win) + (define (tab-group-windows win) "Return the windows of the group containing WIN." (let* ((index (tab-window-group-index win)) (wins (tab-group-window-list (nth index tab-groups)))) wins)) + (define (tab-group-windows-stacking-order win) + "Return the windows of the group containing WIN sort by stacking order.." + (let* ((tabs (tab-group-windows win)) + (all-wins (stacking-order)) + order) + (mapcar (lambda (w) + (if (member w tabs) + (setq order (append order (list w))))) all-wins) + order)) + (define (tab-rank elem list) "Returns the nth position from elem (tab) in a list (tabbar)" (if (eq elem (car list)) @@ -163,10 +176,10 @@ (remove-from-tab-group w)) (setq release-window t) (when (window-tabbed-p w) - (let ((wins (list (remove w (tab-group-window-index w))))) + (let ((wins (list (remove w (tab-group-windows w))))) (if (not (window-get w 'shaded)) (mapcar (lambda (w) - (unshade-window w)) (tab-group-window-index w))) + (unshade-window w)) (tab-group-windows w))) (tab-delete-window-from-group w (tab-window-group-index w)) (window-put w 'fixed-position nil) (tab-refresh-group oldgroup 'frame) @@ -280,10 +293,10 @@ (if viewport-sticky (make-window-sticky/viewport w) (make-window-unsticky/viewport w)))) unfocus)))) - (when (cdr (tab-group-window-index win)) + (when (cdr (tab-group-windows win)) (if not-shaded (unshade-window win)) (mapcar (lambda (w) - (shade-window w)) (remove win (tab-group-window-index win))))) + (shade-window w)) (remove win (tab-group-windows win))))) (setq tab-refresh-lock t)))) ;; Entry points @@ -371,7 +384,7 @@ (setq tab-refresh-lock t) (tab-refresh-group w 'frame) (set-input-focus w) - (call-hook 'tab-group-windows-hook (list (tab-group-window-index w))) + (call-hook 'tab-group-windows-hook (list (tab-group-windows w))) (if (not (window-tabbed-p win)) (window-put win 'tabbed t)) (window-put w 'tabbed t))))) @@ -413,7 +426,7 @@ (define (move-tab w pos) "Move tab W to pos" (when (window-tabbed-p w) - (let* ((wins (tab-group-window-index w)) + (let* ((wins (tab-group-windows w)) (rank (tab-rank w wins)) (list-end (nthcdr rank wins)) (list-start wins) @@ -470,7 +483,7 @@ (define (move-tab-edge w pos) "Move tab W to pos" (when (window-tabbed-p w) - (let ((tabs (remove w (tab-group-window-index w)))) + (let ((tabs (remove w (tab-group-windows w)))) (if (eq pos 'end) (setq all-wins (append tabs (cons w nil)))) (if (eq pos 'beg) @@ -504,8 +517,9 @@ "Releas WIN from the tabgroup and iconify the rest from the group." (let* ((default-window-animator 'none) (index (tab-window-group-index win)) - (wins (tab-group-window-index win)) - (tabs (remove win (tab-group-window-index win)))) + (wins (tab-group-windows win)) + (tabs (remove win (tab-group-windows win)))) + (setq tab-move-resize-lock 't) (tab-delete-window-from-group win index) (reframe-window win) (setq tab-refresh-lock nil) @@ -539,13 +553,14 @@ (window-put w 'never-iconify-opaque nil) (window-put w 'never-iconify t)) (window-put w 'tabbed t)) wins) - (call-hook 'tab-group-windows-hook (list (tab-group-window-index win))) + (call-hook 'tab-group-windows-hook (list (tab-group-windows win))) (raise-window win) (setq all-wins nil)) (setq tab-refresh-lock t) (when (window-tabbed-p win) (tab-refresh-group win 'move) - (tab-refresh-group win 'frame)))) + (tab-refresh-group win 'frame)) + (setq tab-move-resize-lock nil))) (define (unmap-id win) (setq last-unmap-id (window-id win))) @@ -608,4 +623,4 @@ (add-hook 'window-unmaximized-hook (lambda (win) (if (window-tabbed-p win) (tab-refresh-group win 'maximized)))) (add-hook 'destroy-notify-hook tab-delete-window-from-tab-groups)) - (gaol-add set-tab-theme-name tab-refresh-group tab-group-window-index)) + (gaol-add set-tab-theme-name tab-refresh-group tab-group-windows)) diff -urNad lisp.orgi/sawfish/wm/tile/tiler.jl lisp/sawfish/wm/tile/tiler.jl --- lisp.orgi/sawfish/wm/tile/tiler.jl +++ lisp/sawfish/wm/tile/tiler.jl @@ -77,10 +77,11 @@ (define (tileable-window-p w) (and w - (tiling-auto-p (tiling (window-workspace w)) w) + (tiling-auto-p (tiling (window-workspace w)) w) (not (window-never-tile-p w)) - (not (window-ignored-p w)) - (not (dock-window-p w)) + (not (window-ignored-p w)) + (not (dock-window-p w)) + (not (tab-background-p w)) (eq (window-type w) 'default))) (define (tileable-windows #!optional ignore) diff -urNad lisp.orgi/sawfish/wm/tile/utils.jl lisp/sawfish/wm/tile/utils.jl --- lisp.orgi/sawfish/wm/tile/utils.jl +++ lisp/sawfish/wm/tile/utils.jl @@ -19,6 +19,7 @@ notify take group-by + tab-background-p window-never-tile-p) (open rep rep.io.timers @@ -36,18 +37,26 @@ (define (window-never-tile-p w) (window-get w 'never-tile)) + (define (tab-background-p w) + "Returns t if a tabbed window is a background tab" + (require 'sawfish.wm.tabs.tabgroup) + (if tab-move-resize-lock 't + (if (window-tabbed-p w) + (if (member w (nthcdr 1 (tab-group-windows-stacking-order w))) 't)))) + (define (tileable-workspace-windows #!optional ignore) (remove-if (lambda (w) - (or (equal w ignore) - (dock-window-p w) - (window-iconified-p w) - ;; window-matcher - (window-never-tile-p w) - ;; for pager and stuff - (not (window-visible-p w)) - ;; no dialogs - (not (eq (window-type w) 'default)) - (window-ignored-p w))) + (or (equal w ignore) + (dock-window-p w) + (window-iconified-p w) + ;; window-matcher + (window-never-tile-p w) + ;; for pager and stuff + (not (window-visible-p w)) + ;; no dialogs + (not (eq (window-type w) 'default)) + (tab-background-p w) + (window-ignored-p w))) (window-order current-workspace))) (define (window-x w) (car (window-position w))) @@ -67,6 +76,9 @@ (define (push-window w x y width height) (resize-frame-to w (inexact->exact width) (inexact->exact height)) (move-window-to w (inexact->exact x) (inexact->exact y)) + (require 'sawfish.wm.tabs.tabgroup) + (when (window-tabbed-p w) + (tab-refresh-group (nth 0 (tab-group-windows-stacking-order w)) 'move)) (window-order-push w)) (define (focus-window w) (window-order-push w)) diff -urNad lisp.orgi/sawfish/wm/workspace.jl lisp/sawfish/wm/workspace.jl --- lisp.orgi/sawfish/wm/workspace.jl +++ lisp/sawfish/wm/workspace.jl @@ -706,7 +706,7 @@ w current-workspace) current-workspace (car (window-workspaces w)))) - (wins (tab-group-window-index w))) + (wins (tab-group-windows w))) (when orig-space (mapcar (lambda (w) (copy-window-to-workspace w orig-space space)) wins)
--- themes/StyleTab/theme.jl.orgi +++ themes/StyleTab/theme.jl @@ -467,7 +467,7 @@ (define (rotate-tab src dest) (let ((w (current-event-window)) - (wins (tab-group-window-index (current-event-window))) + (wins (tab-group-windows (current-event-window))) pos-x pos-y fdim framew framehigh dim-x dim-y current-title type) (if (not (window-get w 'title-position)) (case styletab-c:titlebar-place @@ -610,7 +610,7 @@ (define (f-type dest) (let ((w (current-event-window)) - (wins (tab-group-window-index (current-event-window))) + (wins (tab-group-windows (current-event-window))) pos-x pos-y dim-x dim-y cur new current-title) (if (not (window-get w 'title-position)) (case styletab-c:titlebar-place
Attachment:
signature.asc
Description: PGP signature
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |