[Sawfish] Patch for tabgroup.jl to fix crash if new tab is sticky

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


Hi,

With one of my last patches i have open a bug. If you add a window as
tab and the add window is sticky sawfish crash if you move the window
by selected first tab. This patch fix this.


-- 
Regards,
Fuchur

GPG Fingerprint: CA3B 8204 5B3E 6D48 6D53  C116 E5BC 70D5 B8D7 B2B0
diff -urNad sawfish.orig/lisp/sawfish/wm/tabs/tabgroup.jl sawfish/lisp/sawfish/wm/tabs/tabgroup.jl
--- sawfish.orig/lisp/sawfish/wm/tabs/tabgroup.jl
+++ sawfish/lisp/sawfish/wm/tabs/tabgroup.jl
@@ -266,8 +266,6 @@
              (group-frame-type (window-get win 'type))
              (group-frame-focus-mode (window-get win 'focus-mode))
              (group-frame-gravity (window-get win 'gravity))
-             (group-frame-sticky (window-get win 'sticky))
-             (group-frame-sticky-viewport (window-get win 'sticky-viewport))
              (group-frame-never-iconify (window-get win 'never-iconify))
              (group-frame-fixed-position (window-get win 'fixed-position))
              (group-frame-title-position (window-get win 'title-position))
@@ -277,7 +275,8 @@
              (group-frame-maximized-horizontally (window-get win 'maximized-horizontally))
              (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-unmaximized-geometry (window-get win 'unmaximized-geometry))
+             group-frame-to-workspaces group-frame-from-workspaces win-is-sticky)
         (when (not (eq index index2))
           ;; tabgroup to tabgroup
           (when (window-tabbed-p w)
@@ -285,44 +284,49 @@
             (tab-delete-window-from-tab-groups w)
             (setq index2 (tab-window-group-index w)))
           (if (window-get win 'iconified) (uniconify-window win))
-          (let ((group-frame-to-workspaces (car (window-workspaces win))))
-            (if (window-get win 'shaded) (unshade-window win))
-            (setq tab-refresh-lock nil)
-            (if (window-get w 'iconified) (uniconify-window w))
-            (let ((group-frame-from-workspaces (car (window-workspaces w))))
-              (if (window-get w 'shaded) (unshade-window w))
-              (window-put w 'frame-style group-frame-style)
-              (window-put w 'type group-frame-type)
-              (window-put w 'focus-mode group-frame-focus-mode)
-              (window-put w 'gravity group-frame-gravity)
-              (window-put w 'title-position group-frame-title-position)
-              (window-put w 'sticky group-frame-sticky)
-              (window-put w 'sticky-viewport group-frame-sticky-viewport)
-              (window-put w 'never-iconify group-frame-never-iconify)
-              (window-put w 'depth group-frame-depth)
-              (window-put w 'fixed-position group-frame-fixed-position)
-              (window-put w 'never-maximize group-frame-never-maximize)
-              (window-put w 'maximized-vertically group-frame-maximized-vertically)
-              (window-put w 'maximized-horizontally group-frame-maximized-horizontally)
-              (window-put w 'maximized-fullscreen group-frame-maximized-fullscreen)
-              (window-put w 'unmaximized-type group-frame-unmaximized-type)
-              (window-put w 'unmaximized-geometry group-frame-unmaximized-geometry)
-              ;; reframe w here, tab-refresh-group expectet
-              ;; the same frame for w and win
-              (reframe-window w)
-              (tab-put-window-in-group w index)
-              (tab-delete-window-from-group w index2)
-              (resize-window-to w (car dim) (cdr dim))
-              (move-window-to w (car pos) (cdr pos))
-              (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))
-              (setq tab-refresh-lock t)
-              (tab-refresh-group w 'frame)
-              (set-input-focus w)
-              (if (not (window-tabbed-p win)) (window-put win 'tabbed t))
-              (window-put w 'tabbed t)))))))
-
+          (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))
+          (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)))
+          (if (window-get w 'iconified) (uniconify-window w))
+          (if (window-get w 'shaded) (unshade-window w))
+          (window-put w 'frame-style group-frame-style)
+          (window-put w 'type group-frame-type)
+          (window-put w 'focus-mode group-frame-focus-mode)
+          (window-put w 'gravity group-frame-gravity)
+          (window-put w 'title-position group-frame-title-position)
+          (window-put w 'never-iconify group-frame-never-iconify)
+          (window-put w 'depth group-frame-depth)
+          (window-put w 'fixed-position group-frame-fixed-position)
+          (window-put w 'never-maximize group-frame-never-maximize)
+          (window-put w 'maximized-vertically group-frame-maximized-vertically)
+          (window-put w 'maximized-horizontally group-frame-maximized-horizontally)
+          (window-put w 'maximized-fullscreen group-frame-maximized-fullscreen)
+          (window-put w 'unmaximized-type group-frame-unmaximized-type)
+          (window-put w 'unmaximized-geometry group-frame-unmaximized-geometry)
+          ;; reframe w here, tab-refresh-group expectet
+          ;; the same frame for w and win
+          (reframe-window w)
+          (tab-put-window-in-group w index)
+          (tab-delete-window-from-group w index2)
+          (resize-window-to w (car dim) (cdr dim))
+          (move-window-to w (car pos) (cdr pos))
+          (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))
+          (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))
+          (window-put w 'tabbed t)))))
+  
   (define (tab-release-window w)
     "Release the window from its group."
     (setq release-window nil)

Attachment: signature.asc
Description: PGP signature



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