| [Sawfish] Some patches |
[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]
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
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 <serg.kozhemyakin@xxxxxxxxx>
+(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)
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))
--- 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)
--- 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))
Attachment:
signature.asc
Description: PGP signature
| Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |