Some patches

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

I have some patches for tab support and tabthemes.

check-win-group-fix.patch:
Improve (add-hook 'destroy-notify-hook check-win). Always rebuild list
from marked windows (also if you select a complete tabgroup) if you
close a marked window.

03-net-wm-window-type-normal-p-1.patch:
Add frame-style-tabs-support-p in tabgroup.jl.
frame-style-tabs-support-p returns 't if a frame-style has tabsupport.
Allowed only add a window or tabgroup add as tab to the "parent"
window if the frame-style from parent window has tabsupport.
improve net-wm-window-type-normal-p 
(get-x-property w '_NET_WM_WINDOW_TYPE) in net-wm-window-type-normal-p
not by all windows it returns something and i got errors
in .xsession-errors but it is fix now.

02-tabthemes-1.patch:
Update Elberg-tabbed and gradient-tabbed. Both themes now work with the
last updates/fixes in tab.jl tabgroup.jl. Also update both themes and
StyleTab to support frame-style-tabs-support-p.

04-keymaps-tab-title-fix.patch:
improve the default keybindings for title-keymap and tabbar-keymap for
tabsupport.

-- 
Regards,
Fuchur

GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53  C116 E5BC 70D5 B8D7 B2B0
02-tabthemes-1.patch (text/x-patch, 7.9 KB)
diff -urNad themes.orgi/Elberg-tabbed/theme.jl themes/Elberg-tabbed/theme.jl
--- themes.orgi/Elberg-tabbed/theme.jl
+++ themes/Elberg-tabbed/theme.jl
@@ -15,6 +15,8 @@
 ;;        ((w-width (car (window-dimensions w))))
 ;;      (max 0 (min (- w-width 100) (text-width (window-name w)))))))
 
+(define theme-name 'Elberg-tabbed)
+
 ;; 6x19 - upper left corner
 (define upper-left-images (list (make-image "i-ul.png")
                                 (make-image "a-ul.png")))
@@ -160,9 +162,7 @@
 
 (define text-colors (list "grey50" "white"))
 
-
 ;; frame layout
-
 (define frame
   `(((background . ,upper-left-images)
      (left-edge . -6)
@@ -292,7 +292,7 @@
 
 (define shaped-frame 
   `(((background . ,upper-left-shaped-images)
-     (left-edge . -6)
+     (left-edge . 6)
      (top-edge . -19)
      (height . 19)
      (class . top-left-corner))
@@ -335,7 +335,7 @@
     
     ;; top-right corner
     ((background . ,upper-right-shaped-images)
-     (right-edge . -6)
+     (right-edge . 6)
      (top-edge . -19)
      (height . 19)
      (class . top-right-corner))
@@ -379,7 +379,6 @@
      (top-edge . -19)
      (class . tabbar-horizontal-right-edge))))
 
-
 (define transient-frame 
   `(((background . ,t-upper-left-images)
      (left-edge . -4)
@@ -477,18 +476,19 @@
                            Elberg-left-m #:theme-right-margin Elberg-rigth-m #:theme-left-margin-transient Elberg-left-m-t 
                            #:theme-right-margin-transient Elberg-right-m-t))))
 
-(create-frames)
-  
-(add-frame-style 'Elberg-tabbed
-                 (lambda (w type)
-                   (case type
-                         ((default) frame)
-                         ((transient) transient-frame)
-                         ((shaped) shaped-frame)
-                         ((shaped-transient) shaped-transient-frame))))
+(define (frame-style-name w)
+  (when (eq (window-get w 'current-frame-style) theme-name)
+    (set-tab-theme-name #:frame-style-supported-tabs theme-name)))
 
-(define (create-frames-only w)
-    (when (eq (window-get w 'current-frame-style) 'Elberg-tabbed)
-      (create-frames)))
+(define (get-frame w type)
+  (create-frames)
+  (case type
+        ((default) frame)
+        ((transient) transient-frame)
+        ((shaped) shaped-frame)
+        ((shaped-transient) shaped-transient-frame)))
 
-(call-after-state-changed '(title-position) create-frames-only)
+(create-frames)
+
+(add-frame-style theme-name get-frame)
+(call-after-state-changed '(tab-theme-name) frame-style-name)
diff -urNad themes.orgi/StyleTab/theme.jl themes/StyleTab/theme.jl
--- themes.orgi/StyleTab/theme.jl
+++ themes/StyleTab/theme.jl
@@ -2626,6 +2626,10 @@
   (reload-frame-style theme-name)
   (reframe-with-style))
 
+(define (frame-style-name w)
+  (when (eq (window-get w 'current-frame-style) theme-name)
+    (set-tab-theme-name #:frame-style-supported-tabs theme-name)))
+
 (define (get-frame w type)
   (let ((current-title 
          (if (not (window-get w 'title-position))
@@ -2655,6 +2659,7 @@
 
 (add-frame-style theme-name get-frame)
 
+(call-after-state-changed '(tab-theme-name) frame-style-name)
 (call-after-state-changed '(marked) reframe-marked)
 (call-after-state-changed '(maximized sticky fixed-position stacking) reframe-one)
 (add-hook 'remove-from-workspace-hook reframe-one)
diff -urNad themes.orgi/gradient-tabbed/theme.jl themes/gradient-tabbed/theme.jl
--- themes.orgi/gradient-tabbed/theme.jl
+++ themes/gradient-tabbed/theme.jl
@@ -4,6 +4,8 @@
 
 ;; Copyright (C) 2009-2011 Sergey Kozhemyakin <[email protected]>
 
+(define theme-name 'gradient-tabbed)
+
 (require 'gradient)
 
 ;; customize variables
@@ -117,8 +119,7 @@
        gradient-tabbed:inactive-menu-color))
     (when (> (cdr (image-dimensions img)) 4)
       (bevel-image img 1 (not (eq state 'clicked))))
-    (set-image-border img 1 1 1 1)
-    ))
+    (set-image-border img 1 1 1 1)))
 
 (define render-close-button
   (lambda (img state)
@@ -129,8 +130,7 @@
        gradient-tabbed:inactive-close-color))
     (when (> (cdr (image-dimensions img)) 4)
       (bevel-image img 1 (not (eq state 'clicked))))
-    (set-image-border img 1 1 1 1)
-    ))
+    (set-image-border img 1 1 1 1)))
 
 (define menu-button
   (list
@@ -155,8 +155,7 @@
        gradient-tabbed:normal-from-color))
     (when (> (cdr (image-dimensions img)) 4)
       (bevel-image img 1 (not (eq state 'clicked))))
-    (set-image-border img 1 1 1 1)
-    ))
+    (set-image-border img 1 1 1 1)))
 
 (define render-resizebar-handle
   (lambda (img state)
@@ -167,8 +166,7 @@
        gradient-tabbed:inactive-handle-color))
     (when (> (cdr (image-dimensions img)) 4)
       (bevel-image img 1 (not (eq state 'clicked))))
-    (set-image-border img 1 1 1 1)
-    ))
+    (set-image-border img 1 1 1 1)))
 
 (define menu
   `((renderer . ,render-menu-button)
@@ -253,8 +251,7 @@
     (class . bottom-left-corner)))
 
 (define left-border
-  `(
-    (background . ,border-color)
+  `((background . ,border-color)
     (left-edge . -1)
     (width . 1)
     (top-edge . -21)
@@ -262,8 +259,7 @@
     (class . left-border)))
 
 (define right-border
-  `(
-    (background . ,border-color)
+  `((background . ,border-color)
     (right-edge . -1)
     (width . 1)
     (top-edge . -21)
@@ -271,8 +267,7 @@
     (class . right-border)))
 
 (define left-transient-border
-  `(
-    (background . ,border-color)
+  `((background . ,border-color)
     (left-edge . -1)
     (width . 1)
     (top-edge . -21)
@@ -280,8 +275,7 @@
     (class . left-border)))
 
 (define right-transient-border
-  `(
-    (background . ,border-color)
+  `((background . ,border-color)
     (right-edge . -1)
     (width . 1)
     (top-edge . -21)
@@ -289,8 +283,7 @@
     (class . right-border)))
 
 (define bottom-border
-  `(
-    (background . ,border-color)
+  `((background . ,border-color)
     (left-edge . -1)
     (right-edge . -1)
     (bottom-edge . -1)
@@ -298,8 +291,7 @@
     (class . bottom-border)))
 
 (define top-border
-  `(
-    (background . ,border-color)
+  `((background . ,border-color)
     (left-edge . -1)
     (right-edge . -1)
     (top-edge . -22)
@@ -309,8 +301,7 @@
 ;; frames definitions
 
 (define frame
-  `(
-    ,menu
+  `(,menu
     ,close
     ,tab
     ,resizebar
@@ -318,33 +309,26 @@
     ,resizebar-right
     ,left-border
     ,right-border
-    ,top-border
-    ))
+    ,top-border))
 
 (define shaped-frame
-  `(
-    ,menu
+  `(,menu
     ,close
     ,tab
     ,left-transient-border
     ,right-transient-border
     ,bottom-border
-    ,top-border
-    ))
+    ,top-border))
 
 (define transient-frame
-  `(
-    ,transient-titlebar
+  `(,tab
     ,left-transient-border
     ,right-transient-border
     ,bottom-border
-    ,top-border
-    ))
+    ,top-border))
 
 (define shaped-transient-frame
-  `(
-    ,transient-titlebar
-    ))
+  `(,tab))
 
 ;; build frames
 
@@ -364,18 +348,19 @@
                            #:theme-left-margin-transient gradient-tabbed-left-m-t
                            #:theme-right-margin-transient gradient-tabbed-right-m-t))))
 
-(create-frames)
+(define (frame-style-name w)
+  (when (eq (window-get w 'current-frame-style) theme-name)
+    (set-tab-theme-name #:frame-style-supported-tabs theme-name)))
 
-(add-frame-style 'gradient-tabbed
-                 (lambda (w type)
-                   (case type
-                     ((default) frame)
-                     ((transient) transient-frame)
-                     ((shaped) shaped-frame)
-                     ((shaped-transient) shaped-transient-frame))))
+(define (get-frame w type)
+  (create-frames)
+  (case type
+        ((default) frame)
+        ((transient) transient-frame)
+        ((shaped) shaped-frame)
+        ((shaped-transient) shaped-transient-frame)))
 
-(define (create-frames-only w)
-  (when (eq (window-get w 'current-frame-style) 'gradient-tabbed)
-    (create-frames)))
+(create-frames)
 
-(call-after-state-changed '(title-position) create-frames-only)
\ Kein Zeilenumbruch am Dateiende.
+(add-frame-style theme-name get-frame)
+(call-after-state-changed '(tab-theme-name) frame-style-name)
03-net-wm-window-type-normal-p-1.patch (text/x-patch, 2.1 KB)
diff -urNad sawfish/lisp/sawfish/wm/tabs.orig/tabgroup.jl sawfish/lisp/sawfish/wm/tabs/tabgroup.jl
--- sawfish/lisp/sawfish/wm/tabs.orig/tabgroup.jl
+++ sawfish/lisp/sawfish/wm/tabs/tabgroup.jl
@@ -22,6 +22,7 @@
 (define-structure sawfish.wm.tabs.tabgroup
 
     (export window-tabbed-p
+            frame-style-tabs-support-p
             net-wm-window-type-normal-p
             tab-refresh-group
             tab-release-window
@@ -59,12 +60,22 @@
   (define release-window t)
   (define last-unmap-id nil)
   (define in-tab-group-name nil)
+  (define tab-theme-name)
+
+  (define (set-tab-theme-name #!key frame-style-supported-tabs)
+    (setq tab-theme-name frame-style-supported-tabs))
 
   (define (window-tabbed-p w)
     (window-get w 'tabbed))
 
+  (define (frame-style-tabs-support-p w)
+    (setq tab-theme-name nil)
+    (call-window-hook 'window-state-change-hook w (list '(tab-theme-name)))
+    (eq (window-get w 'current-frame-style) tab-theme-name))
+  
   (define (net-wm-window-type-normal-p w)
-    (equal (aref (nth 2 (get-x-property w '_NET_WM_WINDOW_TYPE)) 0) '_NET_WM_WINDOW_TYPE_NORMAL))
+    (if (get-x-property w '_NET_WM_WINDOW_TYPE)
+        (equal (aref (nth 2 (get-x-property w '_NET_WM_WINDOW_TYPE)) 0) '_NET_WM_WINDOW_TYPE_NORMAL)))
 
   (define-record-type :tab-group
     (tab-build-group p d wl)
@@ -265,7 +276,8 @@
     ;; is not a "normal" window (e.g. dock panel ...)
     (when (and (not (cdr (window-get win 'workspaces)))
                (net-wm-window-type-normal-p w)
-               (net-wm-window-type-normal-p win))
+               (net-wm-window-type-normal-p win)
+               (frame-style-tabs-support-p win))
       (let* ((index (tab-window-group-index win))
              (index2 (tab-window-group-index w))
              (pos (window-position win))
@@ -499,4 +511,4 @@
     (add-hook 'add-to-workspace-hook (lambda (win) (if (window-tabbed-p win) (tab-refresh-group win 'frame))))
     (add-hook 'destroy-notify-hook tab-delete-window-from-tab-groups))
 
-  (gaol-add tab-refresh-group tab-group-window-index))
+  (gaol-add set-tab-theme-name tab-refresh-group tab-group-window-index))
04-keymaps-tab-title-fix.patch (text/x-patch, 1.5 KB)
--- sawfish.orgi/lisp/sawfish/wm/keymaps.jl
+++ sawfish/lisp/sawfish/wm/keymaps.jl
@@ -118,22 +118,24 @@
 
   (defcustom title-keymap (bind-keys (make-keymap)
 				     "Button3-Off" 'raise-lower-window
+				     "Button3-Move" 'move-window-interactively
+				     "Button3-Click" 'tab-release-window
 				     "Button2-Move" 'resize-window-interactively
-				     "Button1-Off2" 'toggle-window-shaded
-				     "Button1-Move" 'move-window-interactively
 				     "Button2-Off" 'tab-add-to-group
-                                     "C-Button2-Off" 'tabgroup-add-to-group)
+				     "C-Button2-Off" 'tabgroup-add-to-group
+				     "Button1-Off2" 'toggle-window-shaded
+				     "Button1-Move" 'move-window-interactively)
     "Keymap of window title bar. Mouse-bindings only."
     :group bindings
     :type keymap)
 
   (defcustom tabbar-keymap (bind-keys (make-keymap)
-				      "Button1-Off2" 'toggle-window-shaded
-				      "Button1-Move" 'move-window-interactively
-				      "Button2-Off" 'tab-add-to-group
-                                      "C-Button2-Off" 'tabgroup-add-to-group
+				      "Button3-Move" 'move-window-interactively
 				      "Button3-Click" 'tab-release-window
-				      "Button3-Move" 'move-window-interactively)
+				      "Button2-Off" 'tab-add-to-group
+				      "C-Button2-Off" 'tabgroup-add-to-group
+				      "Button1-Off2" 'toggle-window-shaded
+				      "Button1-Move" 'move-window-interactively)
     "Keymap of window tabbar. Mouse-bindings only."
     :group bindings
     :type keymap)
check-win-group-fix.patch (text/x-patch, 838 B)
--- sawfish/lisp/sawfish/wm/tabs/tab.jl.orgi
+++ sawfish/lisp/sawfish/wm/tabs/tab.jl
@@ -213,11 +213,15 @@
   (define-command 'tabgroup-add-to-group tabgroup-add-to-group #:spec "%W")
 
   (define (check-win)
-    (if (and (car marked-window)
-             (not (window-id (car marked-window))))
-        (progn
-          (default-cursor select-cursor)
-          (setq marked-window nil))))
+    (if (car marked-window)
+        (let ((m-list marked-window))
+          (setq marked-window nil)
+          (mapcar (lambda (w)
+                    (if (window-id w)
+                        (setq marked-window (append marked-window (cons w nil))))) m-list)
+          (when (not (car marked-window))
+            (default-cursor select-cursor)
+            (setq marked-window nil)))))
 
   (add-hook 'destroy-notify-hook check-win))
signature.asc (application/pgp-signature, 198 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.19 (GNU/Linux)

iEYEARECAAYFAlBGKfwACgkQ5bxw1bjXsrCmDACdFa15KVwch9CfvKigula+yX6V
jrEAoILD3Pa66NgGc59INJTgyAmpfv7e
=rSuT
-----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.