[Sawfish] Add support for sticky in viewport and sticky in workspace for tabs |
[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]
Hi, With this patch i have add support for sticky viewport and sticky workspace for tabs/group in tabgroup.jl. -- Regards, Fuchur GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53 C116 E5BC 70D5 B8D7 B2B0
diff -urNad sawfish.orgi/lisp/sawfish/wm/tabs/tabgroup.jl sawfish/lisp/sawfish/wm/tabs/tabgroup.jl --- sawfish.orgi/lisp/sawfish/wm/tabs/tabgroup.jl +++ sawfish/lisp/sawfish/wm/tabs/tabgroup.jl @@ -235,11 +235,20 @@ (window-put w 'unmaximized-geometry group-frame-unmaximized-geometry) (tab-move-resize-frame-window-to w (car pos) (cdr pos) (car dim) (cdr dim))) unfocus))) ((eq prop 'sticky) - (mapcar (lambda (w) - (make-window-sticky w)) unfocus)) - ((eq prop 'unsticky) - (mapcar (lambda (w) - (make-window-unsticky w)) unfocus)) + (let ((workspace-sticky (window-sticky-p/workspace win)) + (viewport-sticky (window-sticky-p/viewport win)) + tab-workspace-sticky tab-viewport-sticky) + (mapcar (lambda (w) + (setq tab-workspace-sticky (window-sticky-p/workspace w)) + (setq tab-viewport-sticky (window-sticky-p/viewport w)) + (if (not (eq workspace-sticky tab-workspace-sticky)) + (if workspace-sticky + (make-window-sticky/workspace w) + (make-window-unsticky/workspace w))) + (if (not (eq viewport-sticky tab-viewport-sticky)) + (if viewport-sticky + (make-window-sticky/viewport w) + (make-window-unsticky/viewport w)))) unfocus))) ((eq prop 'shade) (mapcar (lambda (w) (shade-window w)) unfocus)) @@ -276,7 +285,7 @@ (group-frame-maximized-fullscreen (window-get win 'maximized-fullscreen)) (group-frame-unmaximized-type (window-get win 'unmaximized-type)) (group-frame-unmaximized-geometry (window-get win 'unmaximized-geometry)) - group-frame-to-workspaces group-frame-from-workspaces win-is-sticky) + group-frame-to-workspaces group-frame-from-workspaces is-sticky-w is-sticky-v) (when (not (eq index index2)) ;; tabgroup to tabgroup (when (window-tabbed-p w) @@ -286,9 +295,9 @@ (if (window-get win 'iconified) (uniconify-window win)) (if (window-get win 'shaded) (unshade-window win)) (setq tab-refresh-lock nil) - (when (window-sticky-p win) - (make-window-unsticky win) - (setq win-is-sticky 't)) + (if (window-sticky-p/workspace win) (setq is-sticky-w 't)) + (if (window-sticky-p/viewport win) (setq is-sticky-v 't)) + (if (window-sticky-p win) (make-window-unsticky win)) (setq group-frame-to-workspaces (car (window-workspaces win))) (if (window-sticky-p w) (make-window-unsticky w)) (setq group-frame-from-workspaces (car (window-workspaces w))) @@ -318,10 +327,17 @@ (when (and group-frame-to-workspaces group-frame-from-workspaces (not (eq group-frame-to-workspaces group-frame-from-workspaces))) (move-window-to-workspace w group-frame-from-workspaces group-frame-to-workspaces)) + (if (and is-sticky-w is-sticky-v) + (progn + (make-window-sticky win) + (make-window-sticky w)) + (when is-sticky-w + (make-window-sticky/workspace win) + (make-window-sticky/workspace w)) + (when is-sticky-v + (make-window-sticky/viewport win) + (make-window-sticky/viewport w))) (setq tab-refresh-lock t) - (when win-is-sticky - (make-window-sticky win) - (make-window-sticky w)) (tab-refresh-group w 'frame) (set-input-focus w) (if (not (window-tabbed-p win)) (window-put win 'tabbed t)) @@ -369,23 +385,26 @@ (lambda (w) (eq w win)) (tab-group-window-list (tab-find-window win)))) ) + (define (before-move win) + (when (not (window-get win 'fixed-position)) + (before-move-resize win))) + (define (before-move-resize win) "Releas win from the tabgroup and iconify the rest from the group." - (when (not (window-get win 'fixed-position)) - (let* ((default-window-animator 'none) - (index (tab-window-group-index win)) - (wins (tab-group-window-list (nth index tab-groups))) - (tabs (remove win (tab-group-window-list (nth index tab-groups))))) - (tab-delete-window-from-group win index) - (reframe-window win) - (setq tab-refresh-lock nil) - (mapcar (lambda (w) - (when (window-get w 'never-iconify) - (window-put w 'never-iconify nil) - (window-put w 'never-iconify-opaque t)) - (iconify-window w)) tabs) - (setq all-wins wins)) - (setq tab-refresh-lock t))) + (let* ((default-window-animator 'none) + (index (tab-window-group-index win)) + (wins (tab-group-window-list (nth index tab-groups))) + (tabs (remove win (tab-group-window-list (nth index tab-groups))))) + (tab-delete-window-from-group win index) + (reframe-window win) + (setq tab-refresh-lock nil) + (mapcar (lambda (w) + (when (window-get w 'never-iconify) + (window-put w 'never-iconify nil) + (window-put w 'never-iconify-opaque t)) + (iconify-window w)) tabs) + (setq all-wins wins)) + (setq tab-refresh-lock t)) (define (after-move-resize win) "Add all tabs to the tabgroup from win. (Releas and iconify by before-move-resize)" @@ -440,11 +459,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 (tab-group-sticky win) - (if (window-get win 'sticky) - (tab-refresh-group win 'sticky) - (tab-refresh-group win 'unsticky))) - (unless batch-mode (add-hook 'after-add-window-hook in-tab-group) (add-hook 'unmap-notify-hook unmap-id) @@ -453,7 +467,7 @@ (when (window-tabbed-p win) (setq args (car args)) (cond ((eq 'sticky args) - (tab-group-sticky win) + (tab-refresh-group win 'sticky) (tab-refresh-group win 'frame)) ((eq 'fixed-position args) (tab-refresh-group win 'fixed-position) @@ -470,7 +484,7 @@ (tab-refresh-group win 'frame)))))) (when (eq move-outline-mode 'opaque) - (add-hook 'before-move-hook (lambda (win) (if (window-tabbed-p win) (before-move-resize win))))) + (add-hook 'before-move-hook (lambda (win) (if (window-tabbed-p win) (before-move win))))) (add-hook 'after-move-hook (lambda (win) (after-move-resize win))) (when (eq resize-outline-mode 'opaque) (add-hook 'before-resize-hook (lambda (win) (if (window-tabbed-p win) (before-move-resize win)))))
Attachment:
signature.asc
Description: PGP signature
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |