Re: Patch to save memory and speed up StyleTab

fuchur <[email protected]>
Newsgroups gmane.comp.window-managers.sawfish
Organization W.W
Message-ID <[email protected]>
Hi,

On Thu, 10 Apr 2014 01:58:24 +0200
wrote fuchur <[email protected]>:

>Hi,
>
>On Wed, 9 Apr 2014 17:04:11 +0200
>wrote Christopher Roy Bratusek <[email protected]>:
>
>>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
04-tab-tiler-add.patch (text/x-patch, 9.3 KB)
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)
05-tab-tiler-add.patch (text/x-patch, 784 B)
--- 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
signature.asc (application/pgp-signature, 198 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iEYEARECAAYFAlNMOXMACgkQ5bxw1bjXsrCkXQCgqvix1jijd1YmQEkWXa8KBwv3
k6gAoLJCtz/SrTuxH+Xd0EqY3mRPy5+O
=1Mj2
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.