[Sawfish] Patch to set window-type

[ Thread Index | Date Index | More lists.tuxfamily.org/sawfish Archives ]


Here i have a patch to set the window type for matched windows in
sawfish. You can set the type to normal, dialog, dock, desktop, menu,
toolbar, utility, and splashscreen.

I also know that this patch is not "correct". I also know
_NET_WM_WINDOW_TYPE shouldn't not set by a window manager but sometimes
i have windows with wrong _NET_WM_WINDOW_TYPE set by the application
(for me). Can't maximize window because a other window is a dock but it
should not, or a window is a normal window but it should a dialog etc.

I have no problem if you don't accepted the patch but maybe someone
other find the patch helpful, i use the patch since several month.


GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53  C116 E5BC 70D5 B8D7 B2B0
--- sawfish/lisp/sawfish/wm/ext/match-window.jl.orgi
+++ sawfish/lisp/sawfish/wm/ext/match-window.jl
@@ -94,6 +94,7 @@
                                 `(choice ,@(mapcar car match-window-types))))
                  (frame-style ,(lambda ()
                                  `(symbol ,@(find-all-frame-styles t))))
+		 (window-type (choice normal dialog dock desktop menu toolbar utility splashscreen))
 		 (title-position (choice top bottom right left))
 		 (dimensions (pair (number 1) (number 1)))
 		 (maximized (choice all vertical horizontal
@@ -398,6 +399,35 @@
         ;; translate from 1.. to 0..
         (set-window-workspaces w (list (1- value))))))
+  (define-match-window-setter 'window-type
+    (lambda (w prop value)
+      (declare (unused prop))
+      (cond ((eq value 'normal)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_NORMAL) 'ATOM 32)
+         (set-window-type w 'default))
+	    ((eq value 'dialog)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_DIALOG) 'ATOM 32)
+         (mark-window-as-transient w))
+        ((eq value 'dock)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_DOCK) 'ATOM 32)
+         (mark-window-as-dock w))
+        ((eq value 'desktop)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_DESKTOP) 'ATOM 32)
+         (mark-window-as-desktop w))
+        ((eq value 'menu)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_MENU) 'ATOM 32)
+         (set-window-type w 'menu))
+        ((eq value 'toolbar)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_TOOLBAR) 'ATOM 32)
+         (set-window-type w 'toolbar))
+        ((eq value 'utility)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_UTILITY) 'ATOM 32)
+         (set-window-type w 'utility))
+        ((eq value 'splashscreen)
+	     (set-x-property w '_NET_WM_WINDOW_TYPE (vector '_NET_WM_WINDOW_TYPE_SPLASHSCREEN) 'ATOM 32)
+         (set-window-type w 'splash)
+         (window-put w 'place-mode 'centered)))))
   (define-match-window-setter 'position
     (lambda (w prop value)
       (declare (unused prop))

Attachment: signature.asc
Description: PGP signature

Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/