[Sawfish] Patch: Improve stacking/order by tabs |
[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]
Hi, Patch to improve stacking order by tabs.
--- sawfish/lisp/sawfish/wm/tabs/tabgroup.jl.orgi +++ sawfish/lisp/sawfish/wm/tabs/tabgroup.jl @@ -58,6 +58,7 @@ sawfish.wm.commands.move-resize sawfish.wm.stacking sawfish.wm.util.groups + sawfish.wm.util.window-order sawfish.wm.commands.groups sawfish.wm.ext.auto-raise sawfish.wm.ext.shade-hover @@ -66,15 +67,18 @@ (define-structure-alias tabgroup sawfish.wm.tabs.tabgroup) (define all-wins nil) + (define windows-stacking-order nil) (define oldgroup nil) (define tab-groups nil) (define tab-refresh-lock t) (define tab-move-resize-lock nil) + (define destroy nil) (define release-window t) (define last-unmap-id nil) (define in-tab-group-name nil) (define tab-theme-name) (define tab-theme-tabbars) + (define timer-raise nil) (defvar tab-group-windows-hook '() "Tab-group-windows-hook called when changing or creating a tabgroup. @@ -178,6 +182,10 @@ 0 (+ 1 (tab-rank elem (cdr list))))) + (define (destroy-hook w) + (setq destroy 't) + (tab-delete-window-from-tab-groups w)) + (define (tab-delete-window-from-group win index) "Remove WIN from the group at given index." (let* ((old (nth index tab-groups)) @@ -198,12 +206,14 @@ (setq release-window t) (when (window-tabbed-p w) (let ((wins (list (remove w (tab-group-windows w))))) - (if (not (window-get w 'shaded)) - (mapcar (lambda (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) + (unshade-window (nth 0 (tab-group-windows-stacking-order oldgroup))) + (window-order-push (nth 0 (tab-group-windows-stacking-order oldgroup))) + (when (eq destroy 't) + (set-input-focus (nth 0 (tab-group-windows-stacking-order oldgroup))) + (setq destroy nil)) (call-hook 'tab-group-windows-hook wins) (reframe-window w)))) @@ -213,7 +223,8 @@ (rplaca (nthcdr index tab-groups) (tab-build-group (tab-group-position group) (tab-group-dimensions group) - (append (tab-group-window-list group) (list win)))))) + (append (tab-group-window-list group) (list win)))) + (window-order-push win))) (define (tab-refresh-group win prop) "Refresh the entire group containing WIN according to PROP. @@ -235,7 +246,7 @@ (unshade-window w)) wins)) (cond ((eq prop 'raise) - (raise-windows focus wins)) + (raise-windows win (remove win (tab-group-windows-stacking-order win)))) ((eq prop 'title-position) (let ((group-title-position (window-get win 'title-position))) (mapcar (lambda (w) @@ -415,7 +426,8 @@ (set-input-focus 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))))) + (window-put w 'tabbed t) + (raise-windows w (remove w (tab-group-windows-stacking-order w))))))) (define (tab-release-window w) "Release the window from its group." @@ -552,6 +564,7 @@ (let* ((default-window-animator 'none) (index (tab-window-group-index win)) (wins (tab-group-windows win)) + (order (tab-group-windows-stacking-order win)) (tabs (remove win (tab-group-windows win)))) (setq tab-move-resize-lock 't) (tab-delete-window-from-group win index) @@ -562,6 +575,7 @@ (window-put w 'never-iconify nil) (window-put w 'never-iconify-opaque t)) (iconify-window w)) tabs) + (setq windows-stacking-order order) (setq all-wins wins)) (setq tab-refresh-lock t)) @@ -588,7 +602,8 @@ (window-put w 'never-iconify t)) (window-put w 'tabbed t)) wins) (call-hook 'tab-group-windows-hook (list (tab-group-windows win))) - (raise-window win) + (raise-windows win (remove win windows-stacking-order)) + (tab-refresh-group win 'raise) (setq all-wins nil)) (setq tab-refresh-lock t) (when (window-tabbed-p win) @@ -654,7 +669,6 @@ (when (window-get win 'tab-group) (setq in-tab-group-name (remove (assoc last-unmap-id in-tab-group-name) in-tab-group-name)))) - (define timer-raise nil) (define (focus-in-tab win) (let ((timer-wait (if raise-windows-on-focus raise-window-timeout '1))) (if (or (eq focus-mode 'click) @@ -663,7 +677,7 @@ (setq timer-raise (make-timer (lambda () (if (or shade-hover-mode (window-get win 'shade-hover)) - (raise-windows win (tab-group-windows-stacking-order win)) + (raise-windows win (remove win (tab-group-windows-stacking-order win))) (tab-refresh-group win 'raise))) (quotient timer-wait 1000) (mod timer-wait 1000))))) @@ -685,7 +699,6 @@ (shade-window w)) (remove win (tab-group-windows win)))) (set-input-focus win)))) - (unless batch-mode (add-hook 'after-add-window-hook in-tab-group) (add-hook 'unmap-notify-hook unmap-id) @@ -726,6 +739,6 @@ (add-hook 'uniconify-window-hook (lambda (win) (if (window-tabbed-p win) (tab-refresh-group win 'uniconify)))) (add-hook 'window-maximized-hook (lambda (win) (if (window-tabbed-p win) (tab-refresh-group win 'maximized)))) (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)) + (add-hook 'destroy-notify-hook destroy-hook)) (gaol-add set-tab-theme-name set-tab-theme-tabbars tab-refresh-group tab-group-windows))
Attachment:
signature.asc
Description: PGP signature
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |