xwem-patches
[Top] [All Lists]

Summary for xwem--main--2.1--patch-29

From: Zajcev Evgeny <lg@xxxxxxxx>
Subject: Summary for xwem--main--2.1--patch-29
Date: Thu, 3 Mar 2005 02:03:39 +0300 (MSK)
Location: lg@xxxxxxxxxxxxxx http://arch.xwem.org/2005/

Revision: xwem--main--2.1--patch-29
Archive: lg@xxxxxxxxxxxxxx
Creator: Zajcev Evgeny <lg@xxxxxxxx>
Date: Thu Mar  3 02:03:33 MSK 2005
Standard-date: 2005-03-02 23:03:33 GMT
Modified-files: dockapp/xwem-battery.el
    dockapp/xwem-pager.el extra/xwem-edprops.el
    extra/xwem-keytt.el lisp/xwem-keymacro.el
    lisp/xwem-minibuffer.el lisp/xwem-register.el
    lisp/xwem-strokes.el lisp/xwem-tabbing.el
    lisp/xwem-theme.el utils/xwem-worklog.el
New-patches: dev@xxxxxxxxxxxxxxxx/xwem--dev--2.1--patch-25
    lg@xxxxxxxxxxxxxx/xwem--main--2.1--patch-29
Summary: Merge from ckent, fixes, addons
Keywords: battery, worklog, keymacro, themes, registers, pager

* dockapp/xwem-battery.el (main): [addon] Support for non-nil
  `xwem-misc-turbo-mode' added.

* dockapp/xwem-pager.el (xwem-pager-redimentionize): [typo] fix.

* lisp/xwem-keymacro.el (xwem-keymacro-internal-play): [fix] Recursive
  keymacros execution is allowed.

* lisp/xwem-minibuffer.el (xwem-manage-minibuffer): [addon] Apply state
  immediately to avoid geometry breakage, when for example modeline is
  enabled from xwemrc.el.  From this time  you are free to add
  "(xwem-modeline-enable)" into your xwemrc!

* lisp/xwem-minibuffer.el (xwem-refit-minibuffer): [bug] Change Y
  position only if xwem minibuffer is in active state.

* lisp/xwem-minibuffer.el (xwem-modeline-format): [fix addon] Minor modes
  string formating fix.  Client geometry printing added.

* lisp/xwem-minibuffer.el (xwem-modeline-enable): [sem] ARG removed.

* lisp/xwem-minibuffer.el (xwem-modeline-disable): [sem] ARG removed.

* lisp/xwem-register.el (register): [new] New client property -
  'register.  Having registers in client's property allow to keep
  registers between sessions when running under xwem-agent.

* lisp/xwem-strokes.el (xwem-strokes-background-mode): [new] Saved
  background mode when new stroke is started.

* lisp/xwem-tabbing.el (xwem-tabber-font:frame.selected-tab.selected):
  [new] Custom interface to change tabber font.

* lisp/xwem-tabbing.el (xwem-tabber-font:frame.selected-tab.nonselected):
  Ditto.

* lisp/xwem-tabbing.el (xwem-tabber-font:frame.nonselected-tab.selected):
  Ditto.

* lisp/xwem-tabbing.el
  (xwem-tabber-font:frame.nonselected-tab.nonselected): Ditto.

* lisp/xwem-theme.el (themes): Some improvements, still under
  reconstruction.

* utils/xwem-worklog.el (dockapp): [addon] Support for non-nil
  `xwem-misc-turbo-mode' added.

* added files

    {arch}/xwem/xwem--dev/xwem--dev--2.1/dev@xxxxxxxxxxxxxxxx/patch-log/patch-25
    {arch}/xwem/xwem--main/xwem--main--2.1/lg@xxxxxxxxxxxxxx/patch-log/patch-29

* modified files

--- orig/dockapp/xwem-battery.el
+++ mod/dockapp/xwem-battery.el
@@ -135,7 +135,7 @@
 
 (defun xwem-batt-init (xdpy)
   "On display XDPY create and return APM battery monitor window."
-  (let (mgc tgc xwin xmask)
+  (let (xwin xmask xpix)
     (setq xwin (XCreateWindow xdpy (XDefaultRootWindow xdpy)
                              0 0 xwem-batt-width xwem-batt-height 0
                              nil nil nil
@@ -146,43 +146,46 @@
     (setq xmask (XCreatePixmap xdpy (make-X-Pixmap :dpy xdpy
                                                   :id (X-Dpy-get-id xdpy))
                               xwin 1 xwem-batt-width xwem-batt-height))
-    (setq mgc (XCreateGC xdpy xmask
-                        (make-X-Gc :dpy xdpy :id (X-Dpy-get-id xdpy)
-                                   :graphics-exposures X-False
-                                   :foreground 0.0
-                                   :background 1.0)))
-    (setq tgc (XCreateGC xdpy xmask
-                        (make-X-Gc :dpy xdpy :id (X-Dpy-get-id xdpy)
-                                   :graphics-exposures X-False
-                                   :foreground 1.0
-                                   :background 0.0)))
-
     ;; XXX Draw mask
-    (XFillRectangle xdpy xmask mgc 0 0 xwem-batt-width xwem-batt-height)
-    (XFillRectangle xdpy xmask tgc 0 2 xwem-batt-width (- xwem-batt-height 3))
-    (XDrawSegments xdpy xmask tgc
+    (XFillRectangle xdpy xmask xwem-misc-mask-bgc
+                    0 0 xwem-batt-width xwem-batt-height)
+    (XFillRectangle xdpy xmask xwem-misc-mask-fgc
+                    0 2 xwem-batt-width (- xwem-batt-height 3))
+    (XDrawSegments xdpy xmask xwem-misc-mask-fgc
                   (list (cons (cons 3 0) (cons (- xwem-batt-width 4) 0))
                         (cons (cons 1 1) (cons (- xwem-batt-width 2) 1))
                         (cons (cons 1 (- xwem-batt-height 1))
                               (cons (- xwem-batt-width 2)
                                      (- xwem-batt-height 1)))))
 
-    (XFreeGC xdpy mgc)
-    (XFreeGC xdpy tgc)
-
     ;; Set mask
     (X-XShapeMask xdpy xwin X-XShape-Bounding X-XShapeSet 0 0 xmask)
     (setf (xwem-batt-xmask xwin) xmask)
 
+    ;; Create pixmap for storer
+    (setq xpix (XCreatePixmap xdpy (make-X-Pixmap :dpy xdpy
+                                                  :id (X-Dpy-get-id xdpy))
+                              xwin (XDefaultDepth xdpy)
+                              xwem-batt-width xwem-batt-height))
+    (setf (xwem-batt-pixmap xwin) xpix)
+    (xwem-batt-win-update xwin t)
+
     xwin))
 
 (defface xwem-batt-tmp-face
   `((t (:foreground "black")))
   "Temporary face used by apm battery dockapp.")
 
+(define-xwem-deffered xwem-batt-apply-pixmap (xwin)
+  "Apply pixmap storer to XWIN."
+  (XCopyArea (X-Win-dpy xwin) (xwem-batt-pixmap xwin) xwin
+             (XDefaultGC (X-Win-dpy xwin))
+             0 0 xwem-batt-width xwem-batt-height 0 0))
+
 (defun xwem-batt-win-update (xwin &optional force)
   "Update contents of XWIN to reflect current APM battery state."
   (let* ((xdpy (X-Win-dpy xwin))
+         (xpix (xwem-batt-pixmap xwin))
          (as (apm-battery))
          (ac-line-p (car as))
          (cperc (caddr as))
@@ -197,13 +200,14 @@
 
     (when (or force (not (eq dheight (xwem-batt-old-dheight xwin)))
               (not (eq ac-line-p (xwem-batt-old-ac-line-p xwin))))
-      (XClearArea xdpy xwin 0 0 xwem-batt-width xwem-batt-height nil)
+      (XFillRectangle xdpy xpix (XDefaultGC xdpy)
+                      0 0 xwem-batt-width xwem-batt-height)
       ;; Outline battery
-      (XFillRectangle xdpy xwin (XDefaultGC xdpy)
+      (XFillRectangle xdpy xpix (XDefaultGC xdpy)
                       0 0 xwem-batt-width xwem-batt-height)
-      (XDrawRectangle xdpy xwin (xwem-face-get-gc 'xwem-face-black)
+      (XDrawRectangle xdpy xpix (xwem-face-get-gc 'xwem-face-black)
                       1 2 (- xwem-batt-width 3) (- xwem-batt-height 4))
-      (XDrawLine xdpy xwin (xwem-face-get-gc 'xwem-face-black)
+      (XDrawLine xdpy xpix (xwem-face-get-gc 'xwem-face-black)
                  3 1 (- xwem-batt-width 4) 1)
       (setq force t))
 
@@ -215,11 +219,11 @@
       (setq perc-cols (cdar perc-cols))
 
       (xwem-set-face-foreground 'xwem-batt-tmp-face perc-cols)
-      (XFillRectangle xdpy xwin (xwem-face-get-gc 'xwem-batt-tmp-face)
+      (XFillRectangle xdpy xpix (xwem-face-get-gc 'xwem-batt-tmp-face)
                       2 (- xwem-batt-height 2 dheight)
                       (- xwem-batt-width 4) dheight)
       (when (< dheight (- xwem-batt-height 5))
-        (XDrawLine xdpy xwin (xwem-face-get-gc 'xwem-face-black)
+        (XDrawLine xdpy xpix (xwem-face-get-gc 'xwem-face-black)
                    2 (- xwem-batt-height 2 dheight)
                    (- xwem-batt-width 2) (- xwem-batt-height 2 dheight)))
 
@@ -233,22 +237,25 @@
         (let ((acgc (xwem-face-get-gc 'xwem-batt-tmp-face)))
           (setf (X-Gc-line-width acgc) xwem-batt-ac-line-width)
           (XChangeGC xdpy acgc)
-          (XDrawLine xdpy xwin acgc
+          (XDrawLine xdpy xpix acgc
                      xwem-batt-width xwem-batt-ac-line-width
                      0 (- xwem-batt-height xwem-batt-ac-line-width))
           (setf (X-Gc-line-width acgc) 0)
           (XChangeGC xdpy acgc)))
       (setf (xwem-batt-old-ac-line-p xwin) ac-line-p))
-    ))
+
+    (xwem-batt-apply-pixmap xwin)))
 
 (defun xwem-batt-win-remove (xwin &optional need-destroy)
   "Remove battery dockapp."
   (when (xwem-batt-itimer xwin)
     (delete-itimer (xwem-batt-itimer xwin)))
-  (XFreePixmap (xwem-dpy) (xwem-batt-xmask xwin))
+  (XFreePixmap (X-Win-dpy xwin) (xwem-batt-xmask xwin))
+  (XFreePixmap (X-Win-dpy xwin) (xwem-batt-pixmap xwin))
 
   (setf (xwem-batt-itimer xwin) nil
         (xwem-batt-xmask xwin) nil
+        (xwem-batt-pixmap xwin) nil
         (xwem-batt-old-dheight xwin) nil
         (xwem-batt-old-ac-line-p xwin) nil)
 
@@ -275,10 +282,11 @@
 (defun xwem-batt-event-handler (xdpy win xev)
   "Event handler for xwem battery monitor."
   (X-Event-CASE xev
-    ((:X-Expose :X-MapNotify) (xwem-batt-win-update win t))
+    (:X-MapNotify (xwem-batt-win-update win t))
+    (:X-Expose (xwem-batt-apply-pixmap win))
     (:X-DestroyNotify (xwem-batt-win-remove win))
     (:X-ButtonPress
-     (let ((xwem-override-local-map xwem-battery-keymap))
+     (xwem-overriding-local-map xwem-battery-keymap
        (xwem-dispatch-command-xevent xev)))))
 
 ;;;###autoload
@@ -289,6 +297,10 @@
     (error "APM Battery module not loaded"))
 
   (let ((bxwin (xwem-batt-init (xwem-dpy))))
+    ;; Enable turbo mode
+    (when xwem-misc-turbo-mode
+      (XSetWindowBackgroundPixmap (xwem-dpy) bxwin (xwem-batt-pixmap bxwin)))
+
     (XSelectInput (xwem-dpy) bxwin
                  (Xmask-or XM-Exposure XM-StructureNotify
                             XM-ButtonPress XM-ButtonRelease))


--- orig/dockapp/xwem-pager.el
+++ mod/dockapp/xwem-pager.el
@@ -254,7 +254,7 @@
                            (XDefaultDepth (xwem-dpy))
                            w h))
       (when xwem-misc-turbo-mode
-        (XSetWindowBackgroundPixmap (xwem-dpy) xwin
+        (XSetWindowBackgroundPixmap (xwem-dpy) (xwem-pager-xwin xwin)
                                     (xwem-pager-xpix xwin))))
     (xwem-pager-redraw (xwem-pager-xwin xwin) t)))
 


--- orig/extra/xwem-edprops.el
+++ mod/extra/xwem-edprops.el
@@ -38,6 +38,10 @@
 (defvar xwem-edprops-mode-hook nil
   "*Hooks to call when entering xwem edprops mode.")
 
+(defvar xwem-edprops-allowed-values
+  '(numberp characterp stringp symbolp)
+  "List of allowed types of property value.")
+
 (defvar xwem-edprops-client nil)
 (make-variable-buffer-local 'xwem-client-edprops-client)
 
@@ -128,9 +132,8 @@
      "(\n\n")
     (save-excursion
       (mapc (lambda (kv)
-              (when (or (numberp (cdr kv))
-                        (symbolp (cdr kv))
-                        (stringp (cdr kv)))
+              (when (loop for tt in xwem-edprops-allowed-values
+                      if (funcall tt (cdr kv)) return t)
                 (insert (format "%S %S\n" (car kv) (cdr kv)))))
             (plist-to-alist (xwem-cl-plist cl)))
     


--- orig/extra/xwem-keytt.el
+++ mod/extra/xwem-keytt.el
@@ -267,7 +267,7 @@
 
 
 ;;; On-load actions:
-(xwem-add-minor-mode 'xwem-keytt-minor-mode "KeyTT " 'xwem-keytt-keymap)
+(xwem-add-minor-mode 'xwem-keytt-minor-mode "KeyTT" 'xwem-keytt-keymap)
 
 
 (provide 'xwem-keytt)


--- orig/lisp/xwem-keymacro.el
+++ mod/lisp/xwem-keymacro.el
@@ -205,10 +205,6 @@
       (xwem-dispatch-command-event
        (aref xwem-keymacro-keys xwem-keymacro-keys-index))
       (incf xwem-keymacro-keys-index))))
-;  (enqueue-eval-event 'xwem-keymacro-start-executing-keys t)
-;  (mapc 'xwem-unread-command-event keys)
-;  (enqueue-eval-event 'xwem-keymacro-stop-executing-keys t)
-;  )
 
 (defun xwem-keymacro-start-recording ()
   "Start recording Keys."
@@ -280,32 +276,30 @@
 ;;;###xwem-autoload
 (defun xwem-keymacro-internal-play (keys &optional times)
   "Play Emacs KEYS TIMES times."
-  (unless (xwem-keymacro-executing-p)
-    (unless times
-      (setq times 1))
-
-    ;; Unset some variables
-    (setq xwem-this-command-keys [])
-    (setq xwem-kbd-now-grabbing nil)
-    (setq xwem-prefix-arg nil)
-
-    (when xwem-keymacro-show-macro
-      (xwem-message 'macro "Executing macro: '%s'%s"
-                    (key-description keys)
-                    (if (> times 1)
-                        (format " %d times" times)
-                      "")))
-
-    ;; Force release of modifiers
-    (xwem-kbd-force-mods-release)
-
-    ;; Adjust KEYS acording to TIMES argument
-    (let ((key-sequence []))
-      (while (> times 0)
-        (setq key-sequence (vconcat key-sequence keys))
-        (decf times))
-      ;; Finally execute keys
-      (xwem-keymacro-execute-keys key-sequence))))
+  (unless times (setq times 1))
+
+  ;; Unset some variables
+  (setq xwem-this-command-keys [])
+  (setq xwem-kbd-now-grabbing nil)
+  (setq xwem-prefix-arg nil)
+
+  (when xwem-keymacro-show-macro
+    (xwem-message 'macro "Executing macro: '%s'%s"
+                  (key-description keys)
+                  (if (> times 1)
+                      (format " %d times" times)
+                    "")))
+
+  ;; Force release of modifiers
+  (xwem-kbd-force-mods-release)
+
+  ;; Adjust KEYS acording to TIMES argument
+  (let ((key-sequence []))
+    (while (> times 0)
+      (setq key-sequence (vconcat key-sequence keys))
+      (decf times))
+    ;; Finally execute keys
+    (xwem-keymacro-execute-keys key-sequence)))
 
 ;; Commands to be used in `xwem-keymacro-user-macros'
 ;;;###autoload(autoload 'xwem-keymacro-undefined "xwem-keymacro" nil t)


--- orig/lisp/xwem-minibuffer.el
+++ mod/lisp/xwem-minibuffer.el
@@ -393,7 +393,8 @@
         (setq default-minibuffer-frame (xwem-minib-frame xwem-minibuffer))))
 
     ;; Now activate minibuffer
-    (xwem-activate cl)))
+    (xwem-activate cl)
+    (xwem-minib-apply-state-1 minib )))
 
 (define-xwem-deffered xwem-minib-apply-pxgeom (minib)
   "Apply MINIB's parent geometry to life."
@@ -443,9 +444,10 @@
     ;; Check maybe parent need to be resized/moved?
     (unless (= (X-Geom-height-with-borders cl-xgeom)
                (X-Geom-height pxgeom))
-      (decf (X-Geom-y pxgeom)
-            (- (X-Geom-height-with-borders cl-xgeom)
-               (X-Geom-height pxgeom)))
+      (when (eq (xwem-cl-state cl) 'active)
+        (decf (X-Geom-y pxgeom)
+              (- (X-Geom-height-with-borders cl-xgeom)
+                 (X-Geom-height pxgeom))))
       (setf (X-Geom-height pxgeom)
             (X-Geom-height-with-borders cl-xgeom))
       (xwem-minib-apply-pxgeom (xwem-cl-minibuffer cl)))))
@@ -488,6 +490,7 @@
         (XMoveWindow (xwem-dpy) (xwem-minib-xwin minib)
                      (X-Geom-x (xwem-minib-xgeom minib))
                      (X-Geom-y (xwem-minib-xgeom minib)))
+        (XFlush (xwem-dpy))
         (when param
           (sit-for param t))
         (setq i (1+ i)))
@@ -676,12 +679,17 @@
     ("   ")
     ;; Minor modes
     ("(")
-    ((mapconcat #'(lambda (mm)
-                    (when (symbol-value (car mm))
-                      (cadr mm)))
-                xwem-minor-mode-alist ""))
+    ((mapconcat 'identity
+                (delq nil (mapcar #'(lambda (mm)
+                                      (and (symbol-value (car mm))
+                                           (cadr mm)))
+                                  xwem-minor-mode-alist)) " "))
     (")")
-    ("--"))
+    ("----")
+    ((let ((usz (xwem-cl-get-usize cl)))
+       (format "%dx%d" (car usz) (cdr usz))))
+    ("--")
+    )
   "Modeline format.")
 (xwem-make-variable-client-local 'xwem-modeline-format)
 
@@ -708,9 +716,9 @@
       )))
 
 ;;;###autoload(autoload 'xwem-modeline-enable "xwem-minibuffer" nil t)
-(define-xwem-command xwem-modeline-enable (arg)
+(define-xwem-command xwem-modeline-enable ()
   "Enable modeline."
-  (xwem-interactive "P")
+  (xwem-interactive)
 
   (add-hook 'xwem-cl-change-hook 'xwem-modeline-redraw)
   (add-hook 'xwem-client-select-hook 'xwem-modeline-redraw)
@@ -728,9 +736,9 @@
                           (xwem-minib-frame xwem-minibuffer)))))
 
 ;;;###autoload(autoload 'xwem-modeline-disable "xwem-minibuffer" nil t)
-(define-xwem-command xwem-modeline-disable (arg)
+(define-xwem-command xwem-modeline-disable ()
   "Disable modeline."
-  (xwem-interactive "P")
+  (xwem-interactive)
 
   (remove-hook 'xwem-cl-change-hook 'xwem-modeline-redraw)
   (remove-hook 'xwem-client-select-hook 'xwem-modeline-redraw)


--- orig/lisp/xwem-register.el
+++ mod/lisp/xwem-register.el
@@ -123,10 +123,7 @@
 (define-xwem-command xwem-register-client (register)
   "Store selected client to REGISTER."
   (xwem-interactive "kClient to register: ")
-
-  (let ((reg (event-key register)))
-    (xwem-register-set reg (list 'XWEM-CLIENT
-                                 (xwem-cl-selected)))))
+  (xwem-client-set-property (xwem-cl-selected) 'register (event-key register)))
 
 ;;;###autoload(autoload 'xwem-register-win-config "xwem-register" "" t)
 (define-xwem-command xwem-register-win-config (register)
@@ -218,6 +215,28 @@
                      (not (xwem-register-get r))))
       (xwem-register-set r (list 'XWEM-CLIENT cl)))))
 
+
+;;; Register as client property
+(defun xwem-client-set-register (cl rprop reg)
+  "Set CL's register property RPROP to REG."
+  ;; Remove REG from any other clients
+  (mapc #'(lambda (ocl)
+            (when (eq reg (xwem-cl-get-prop ocl rprop))
+              (xwem-cl-rem-prop ocl rprop)))
+        (xwem-clients-list))
+
+  ;; Save it in CL's plist
+  (xwem-cl-put-prop cl rprop reg)
+  
+  ;; And finally register REG
+  (when reg
+    (xwem-register-set reg (list 'XWEM-CLIENT cl))))
+
+(define-xwem-client-property register nil
+  "CL's register."
+  :type 'char
+  :set 'xwem-client-set-register)
+
 
 (provide 'xwem-register)
 


--- orig/lisp/xwem-strokes.el
+++ mod/lisp/xwem-strokes.el
@@ -133,6 +133,9 @@
 (defvar xwem-strokes-defining nil
   "Non-nil mean that we defining stroke now.")
 
+(defvar xwem-strokes-background-mode nil
+  "Saved background mode.")
+
 (defvar xwem-strokes-cursor nil
   "Cursor used while reading stroke.")
 
@@ -280,10 +283,11 @@
 (defun xwem-strokes-start-new (x y)
   "Start new stroke or new stick at X Y point."
   (push (cons x y) xwem-strokes-curr)
+  (setq xwem-strokes-background-mode
+        (xwem-misc-xwin-background-mode (xwem-rootwin) x y))
   (XDrawArc (xwem-dpy) (xwem-rootwin)
             (xwem-face-get-gc 'xwem-strokes-face
-              (list 'background 'begin
-                    (xwem-misc-xwin-background-mode (xwem-rootwin) x y)))
+              (list 'background 'begin xwem-strokes-background-mode))
             x y 1 1 0 (* 360 64)))
 
 (defun xwem-strokes-continue (x y)
@@ -294,7 +298,8 @@
                
     (push (cons x y) xwem-strokes-curr)
     (XDrawLine (xwem-dpy) (xwem-rootwin)
-               (xwem-face-get-gc 'xwem-strokes-face)
+               (xwem-face-get-gc 'xwem-strokes-face
+                 (list 'background xwem-strokes-background-mode))
                old-x old-y x y)))
 
 ;;;###autoload(autoload 'xwem-strokes-define "xwem-strokes" "" t)


--- orig/lisp/xwem-tabbing.el
+++ mod/lisp/xwem-tabbing.el
@@ -133,6 +133,55 @@
   :group 'xwem-tab
   :group 'xwem-faces)
 
+;; Another interface to customize tabber fonts
+(defcustom xwem-tabber-font:frame.selected-tab.selected nil
+  "Font to be used in selected tab of selected frame."
+  :type '(restricted-sexp :match-alternatives (nil try-font-name))
+  :set (lambda (sym val)
+         (set sym val)
+         (xwem-set-face-font
+          'xwem-tabber-face
+          (or val (xwem-face-font 'xwem-tabber-face '(default)))
+          '(frame-selected tab-selected)))
+  :initialize 'custom-initialize-default
+  :group 'xwem-tab)
+
+(defcustom xwem-tabber-font:frame.selected-tab.nonselected nil
+  "Font to be used in selected tab of selected frame."
+  :type '(restricted-sexp :match-alternatives (nil try-font-name))
+  :set (lambda (sym val)
+         (set sym val)
+         (xwem-set-face-font
+          'xwem-tabber-face
+          (or val (xwem-face-font 'xwem-tabber-face '(default)))
+          '(frame-selected tab-nonselected)))
+  :initialize 'custom-initialize-default
+  :group 'xwem-tab)
+
+(defcustom xwem-tabber-font:frame.nonselected-tab.selected nil
+  "Font to be used in selected tab of selected frame."
+  :type '(restricted-sexp :match-alternatives (nil try-font-name))
+  :set (lambda (sym val)
+         (set sym val)
+         (xwem-set-face-font
+          'xwem-tabber-face
+          (or val (xwem-face-font 'xwem-tabber-face '(default)))
+          '(frame-nonselected tab-selected)))
+  :initialize 'custom-initialize-default
+  :group 'xwem-tab)
+
+(defcustom xwem-tabber-font:frame.nonselected-tab.nonselected nil
+  "Font to be used in selected tab of selected frame."
+  :type '(restricted-sexp :match-alternatives (nil try-font-name))
+  :set (lambda (sym val)
+         (set sym val)
+         (xwem-set-face-font
+          'xwem-tabber-face
+          (or val (xwem-face-font 'xwem-tabber-face '(default)))
+          '(frame-nonselected tab-nonselected)))
+  :initialize 'custom-initialize-default
+  :group 'xwem-tab)
+  
 ;;; Internal variables
 
 (defvar xwem-tabber-map


--- orig/lisp/xwem-theme.el
+++ mod/lisp/xwem-theme.el
@@ -313,28 +313,28 @@
     (custom xwem-frame-cursor-background-color "black")))
 
 (defconst xwem-cursor-ocean-theme
-  `((custom xwem-cursor-help-foreground-color "#888888")
-    (custom xwem-cursor-help-background-color "#080808")
-    (custom xwem-root-cursor-foreground-color "black")
-    (custom xwem-root-cursor-background-color "white")
-    (custom xwem-frame-cursor-foreground-color "white")
-    (custom xwem-frame-cursor-background-color "black")))
+  `((custom xwem-cursor-help-foreground-color "#009999")
+    (custom xwem-cursor-help-background-color "#006B6B")
+    (custom xwem-root-cursor-foreground-color "#005858")
+    (custom xwem-root-cursor-background-color "#AFFFFA")
+    (custom xwem-frame-cursor-foreground-color "#BFFFFB")
+    (custom xwem-frame-cursor-background-color "#006D66")))
 
 (defconst xwem-cursor-spring-theme
-  `((custom xwem-cursor-help-foreground-color "#888888")
-    (custom xwem-cursor-help-background-color "#080808")
-    (custom xwem-root-cursor-foreground-color "black")
-    (custom xwem-root-cursor-background-color "white")
-    (custom xwem-frame-cursor-foreground-color "white")
-    (custom xwem-frame-cursor-background-color "black")))
+  `((custom xwem-cursor-help-foreground-color "#00B366")
+    (custom xwem-cursor-help-background-color "#007D48")
+    (custom xwem-root-cursor-foreground-color "#007B3D")
+    (custom xwem-root-cursor-background-color "#BFFFD6")
+    (custom xwem-frame-cursor-foreground-color "#80FFC9")
+    (custom xwem-frame-cursor-background-color "#007D48")))
 
 (defconst xwem-cursor-winter-theme
-  `((custom xwem-cursor-help-foreground-color "#888888")
-    (custom xwem-cursor-help-background-color "#080808")
-    (custom xwem-root-cursor-foreground-color "black")
-    (custom xwem-root-cursor-background-color "white")
+  `((custom xwem-cursor-help-foreground-color "white")
+    (custom xwem-cursor-help-background-color "gray50")
+    (custom xwem-root-cursor-foreground-color "white")
+    (custom xwem-root-cursor-background-color "gray50")
     (custom xwem-frame-cursor-foreground-color "white")
-    (custom xwem-frame-cursor-background-color "black")))
+    (custom xwem-frame-cursor-background-color "gray50")))
 
 (defvar xwem-cursor-themes
   '((default . xwem-cursor-default-theme)
@@ -349,12 +349,16 @@
 (defconst xwem-frame-default-theme
   '((frame-property inner-border-width 8)
     (frame-property inner-border-thickness 2)
-    (frame-property title-height 18)))
+    (frame-property title-height 18)
+    (custom xwem-win-vertical-delim-width (8 . 1))
+    (custom xwem-win-horizontal-delim-width (6 . 1))))
 
 (defconst xwem-frame-extrim-theme
   '((frame-property inner-border-width 3)
     (frame-property inner-border-thickness 1)
-    (frame-property title-height 12)))
+    (frame-property title-height 12)
+    (custom xwem-win-vertical-delim-width (4 . 1))
+    (custom xwem-win-horizontal-delim-width (3 . 1))))
 
 (defvar xwem-frame-themes
   '((default . xwem-frame-default-theme)
@@ -366,8 +370,318 @@
 (defvar xwem-managing-themes nil
   "List of themes to manage clients.")
 
-
-(defvar xwem-face-themes nil
+(defconst xwem-face-default-theme
+  '((face xwem-tabber-face
+          (((frame-selected tab-selected)
+            (:foreground "white" :background "green4" :bold t))
+           ((delimiter-left frame-selected tab-selected)
+            (:foreground "white"))
+           ((delimiter-right frame-selected tab-selected)
+            (:foreground "black"))
+
+           ((frame-selected tab-nonselected)
+            (:foreground "black" :background "gray80"))
+           ((delimiter-left frame-selected tab-nonselected)
+            (:foreground "white"))
+           ((delimiter-right frame-selected tab-nonselected)
+            (:foreground "black"))
+
+           ((frame-nonselected tab-selected)
+            (:foreground "gray80" :background "DarkGreen" :bold t))
+           ((delimiter-left frame-nonselected tab-selected)
+            (:foreground "white"))
+           ((delimiter-right frame-nonselected tab-selected)
+            (:foreground "black"))
+
+           ((frame-nonselected tab-nonselected)
+            (:foreground "black" :background "gray40"))
+           ((delimiter-left frame-nonselected tab-nonselected)
+            (:foreground "white"))
+           ((delimiter-right frame-nonselected tab-nonselected)
+            (:foreground "black"))
+
+           (t (:foreground "white"))))
+
+    (face x-border-face
+          (((selected) (:foreground "green"))
+           (t (:foreground "gray80"))))
+
+    (face xwem-frame-inner-border-face
+          (((light nonselected)
+            (:foreground "gray80" :background "gray80"))
+           ((medium nonselected)
+            (:foreground "gray50" :background "gray50"))
+           ((dark nonselected)
+            (:foreground "gray20" :background "gray20"))
+           ((light selected)
+            (:foreground "cyan2" :background "cyan2"))
+           ((medium selected)
+            (:foreground "royalblue" :background "royalblue"))
+           ((dark selected)
+            (:foreground "blue4" :background "blue4"))))
+
+    (face xwem-launch-dock-face
+          (((medium) (:foreground "gray70"))
+           ((light) (:foreground "white"))
+           ((dark) (:foreground "black"))))
+
+    (face xwem-strokes-face
+          (((background light)
+            (:foreground "red4" :background "black"))
+           ((background dark)
+            (:foreground "red" :background "black"))
+           ((background begin light)
+            (:foreground "magenta4" :background "black"
+                         :line-width 12 :cap-style X-CapRound))
+           ((background begin dark)
+            (:foreground "magenta" :background "black"
+                         :line-width 12 :cap-style X-CapRound))))
+
+    (face xwem-tray-delimiter-face
+          (((background light)
+            (:foreground "gray40"))
+           ((background light shadow)
+            (:foreground "gray30"))
+           ((background dark)
+            (:foreground "gray70"))
+           ((background dark shadow)
+            (:foreground "gray80"))))
+
+    (face xwem-window-outline-face
+          (((frame-selected win-selected)
+            (:foreground "green" :background "green4" :line-width 4))
+           ((frame-selected win-nonselected)
+            (:foreground "gray70" :background "gray70" :line-width 4))
+           ((frame-nonselected win-selected)
+            (:foreground "green3" :background "green4" :line-width 4))
+           ((frame-nonselected win-nonselected)
+            (:foreground "gray60" :background "gray40" :line-width 4))))
+
+    (face xwem-window-delimiter-face
+          (((horizontal)
+            (:foreground "royalblue" :background "black"))
+           ((horizontal shadow)
+            (:foreground "blue4" :background "black"))
+           ((horizontal light shadow)
+            (:foreground "cyan" :background "black"))
+           ((vertical)
+            (:foreground "royalblue" :background "black"))
+           ((shadow vertical)
+            (:foreground "blue4" :background "black"))
+           ((light shadow vertical)
+            (:foreground "cyan" :background "black"))
+           (t (:foreground "gray20" :background "black")))))
+  "Default faces theme.")
+
+(defconst xwem-face-extrim-theme
+  `((face xwem-tabber-face
+     (((frame-selected tab-selected)
+       (:foreground "white" :background "gray20"
+        :font "-*-fixed-medium-r-*-*-12-*-*-*-*-*-*-*" :bold t))
+      ((delimiter-left frame-selected tab-selected)
+       (:foreground "white"))
+      ((delimiter-right frame-selected tab-selected)
+       (:foreground "black"))
+
+      ((frame-selected tab-nonselected)
+       (:foreground "black" :background "gray80"
+        :font "-*-fixed-medium-r-*-*-12-*-*-*-*-*-*-*"))
+      ((delimiter-left frame-selected tab-nonselected)
+       (:foreground "white"))
+      ((delimiter-right frame-selected tab-nonselected)
+       (:foreground "black"))
+
+      ((frame-nonselected tab-selected)
+       (:foreground "gray80" :background "gray40"
+        :font "-*-fixed-medium-r-*-*-12-*-*-*-*-*-*-*" :bold t))
+      ((delimiter-left frame-nonselected tab-selected)
+       (:foreground "white"))
+      ((delimiter-right frame-nonselected tab-selected)
+       (:foreground "black"))
+
+      ((frame-nonselected tab-nonselected)
+       (:foreground "black" :background "gray40"
+        :font "-*-fixed-medium-r-*-*-12-*-*-*-*-*-*-*"))
+      ((delimiter-left frame-nonselected tab-nonselected)
+       (:foreground "white"))
+      ((delimiter-right frame-nonselected tab-nonselected)
+       (:foreground "black"))))
+
+    (face x-border-face
+     (((selected) (:foreground "white"))
+      (t (:foreground "dark"))))
+
+    (face xwem-frame-inner-border-face
+     (((light nonselected)
+       (:foreground "gray80"))
+      ((medium nonselected)
+       (:foreground "gray50"))
+      ((dark nonselected)
+       (:foreground "gray20"))
+      ((light selected)
+       (:foreground "white"))
+      ((medium selected)
+       (:foreground "gray50"))
+      ((dark selected)
+       (:foreground "dark"))))
+
+    (face xwem-launch-dock-face
+     (((medium) (:foreground "gray70"))
+      ((light) (:foreground "white"))
+      ((dark) (:foreground "black"))))
+
+    (face xwem-strokes-face
+     (((background light)
+       (:foreground "dimgray" :background "black"))
+      ((background dark)
+       (:foreground "lightgray" :background "black"))
+      ((background begin light)
+       (:foreground "darkslategrey" :background "black"
+        :line-width 12 :cap-style X-CapRound))
+      ((background begin dark)
+       (:foreground "grey" :background "black"
+        :line-width 12 :cap-style X-CapRound))))
+
+    (face xwem-tray-delimiter-face
+     (((background light)
+       (:foreground "gray40"))
+      ((background light shadow)
+       (:foreground "gray30"))
+      ((background dark)
+       (:foreground "gray70"))
+      ((background dark shadow)
+       (:foreground "gray80"))))
+
+    (face xwem-window-outline-face
+     (((frame-selected win-selected)
+       (:foreground "dark" :background "dark"))
+      ((frame-selected win-nonselected)
+       (:foreground "gray50" :background "gray50"))
+      ((frame-nonselected win-selected)
+       (:foreground "gray20" :background "gray20"))
+      ((frame-nonselected win-nonselected)
+       (:foreground "gray60" :background "gray40"))))
+
+    (face xwem-window-delimiter-face
+     (((horizontal)
+       (:foreground "gray30" :background "black"))
+      ((horizontal shadow)
+       (:foreground "gray10" :background "black"))
+      ((horizontal light shadow)
+       (:foreground "gray80" :background "black"))
+      ((vertical)
+       (:foreground "gray10" :background "black"))
+      ((shadow vertical)
+       (:foreground "gray40" :background "black"))
+      ((light shadow vertical)
+       (:foreground "white" :background "black")))))
+  "Extrim face theme.")
+
+(defconst xwem-face-ocean-theme
+  '((face xwem-tabber-face
+          (((frame-selected tab-selected)
+            (:foreground "#7DC5C5" :background "#174D4D" :bold t))
+           ((delimiter-left frame-selected tab-selected)
+            (:foreground "white"))
+           ((delimiter-right frame-selected tab-selected)
+            (:foreground "black"))
+
+           ((frame-selected tab-nonselected)
+            (:foreground "#102A2A" :background "#598080"))
+           ((delimiter-left frame-selected tab-nonselected)
+            (:foreground "white"))
+           ((delimiter-right frame-selected tab-nonselected)
+            (:foreground "black"))
+
+           ((frame-nonselected tab-selected)
+            (:foreground "#6BA0A0" :background "#406060" :bold t))
+           ((delimiter-left frame-nonselected tab-selected)
+            (:foreground "white"))
+           ((delimiter-right frame-nonselected tab-selected)
+            (:foreground "black"))
+
+           ((frame-nonselected tab-nonselected)
+            (:foreground "#123D3D" :background "#507070"))
+           ((delimiter-left frame-nonselected tab-nonselected)
+            (:foreground "white"))
+           ((delimiter-right frame-nonselected tab-nonselected)
+            (:foreground "black"))))
+
+    (face x-border-face
+          (((selected) (:foreground "#10BABA"))
+           (t (:foreground "#085580"))))
+
+    (face xwem-frame-inner-border-face
+          (((light nonselected)
+            (:foreground "gray80" :background "gray80"))
+           ((medium nonselected)
+            (:foreground "gray50" :background "gray50"))
+           ((dark nonselected)
+            (:foreground "gray20" :background "gray20"))
+           ((light selected)
+            (:foreground "#7DB3B3" :background "#7DB3B3"))
+           ((medium selected)
+            (:foreground "#176D6D" :background "#176D6D"))
+           ((dark selected)
+            (:foreground "#102A2A" :background "#102A2A"))))
+
+    (face xwem-launch-dock-face
+          (((medium) (:foreground "#176D6D"))
+           ((light) (:foreground "#7DB3B3"))
+           ((dark) (:foreground "#102A2A"))))
+
+    (face xwem-strokes-face
+          (((background light)
+            (:foreground "#176D6D" :background "black"))
+           ((background dark)
+            (:foreground "#7DB3B3" :background "black"))
+           ((background begin light)
+            (:foreground "#154C4C" :background "black"
+                         :line-width 12 :cap-style X-CapRound))
+           ((background begin dark)
+            (:foreground "#6DA0A0" :background "black"
+                         :line-width 12 :cap-style X-CapRound))))
+
+    (face xwem-tray-delimiter-face
+          (((background light)
+            (:foreground "gray40"))
+           ((background light shadow)
+            (:foreground "gray30"))
+           ((background dark)
+            (:foreground "gray70"))
+           ((background dark shadow)
+            (:foreground "gray80"))))
+
+    (face xwem-window-outline-face
+          (((frame-selected win-selected)
+            (:foreground "#10BABA" :background "green4" :line-width 4))
+           ((frame-selected win-nonselected)
+            (:foreground "gray70" :background "gray70" :line-width 4))
+           ((frame-nonselected win-selected)
+            (:foreground "#109898" :background "green4" :line-width 4))
+           ((frame-nonselected win-nonselected)
+            (:foreground "gray60" :background "gray40" :line-width 4))))
+
+    (face xwem-window-delimiter-face
+          (((horizontal)
+            (:foreground "#176D6D" :background "#176D6D"))
+           ((horizontal shadow)
+            (:foreground "#102A2A" :background "#102A2A"))
+           ((horizontal light shadow)
+            (:foreground "#7DB3B3" :background "#7DB3B3"))
+           ((vertical)
+            (:foreground "#176D6D" :background "#176D6D"))
+           ((shadow vertical)
+            (:foreground "#102A2A" :background "#102A2A"))
+           ((light shadow vertical)
+            (:foreground "#7DB3B3" :background "#7DB3B3")))))
+  "Ocean faces theme.")
+
+(defvar xwem-face-themes
+  '((default . xwem-face-default-theme)
+    (extrim . xwem-face-extrim-theme)
+    (ocean . xwem-face-ocean-theme)
+    )
   "List of themes for xwem faces.")
 
 (defvar xwem-frame-themes nil


--- orig/utils/xwem-worklog.el
+++ mod/utils/xwem-worklog.el
@@ -1385,6 +1385,7 @@
 (defstruct xwem-worklog-dockapp
   win                                   ; X Window for dockapp
   mask                                  ; Mask Pixmap for dockapp
+  pixmap                                ; Pixmap for storer
   update-itimer                         ; itimer to update worklog-dockapp
 
   ;; dockapp and sector geometry
@@ -1394,6 +1395,9 @@
 (defconst xwem-worklog-dockapp-event-mask
   (list XM-Exposure XM-StructureNotify XM-ButtonPress XM-ButtonRelease))
 
+(defvar xwem-worklog-default-dockapp nil
+  "Default worklog dockapp.")
+
 (defun xwem-worklog-meaning-update-time ()
   "Return seconds."
   (if (> xwem-worklog-day-ends xwem-worklog-day-start)
@@ -1404,9 +1408,19 @@
 ;; TODO:
 ;;   - Get rid of double call to `xwem-worklog-generate-percentage-spec'
 ;;   - Implement separated update for current task brick
+(define-xwem-deffered xwem-worklog-dockapp-apply-pixmap (&optional dockapp)
+  "Apply DOCKAPP's pixmap storer to real window."
+  (unless dockapp (setq dockapp xwem-worklog-default-dockapp))
+  (XCopyArea (xwem-dpy) (xwem-worklog-dockapp-pixmap dockapp)
+             (xwem-worklog-dockapp-win dockapp) (XDefaultGC (xwem-dpy))
+             0 0 (X-Pixmap-width (xwem-worklog-dockapp-pixmap dockapp))
+             (X-Pixmap-height (xwem-worklog-dockapp-pixmap dockapp))
+             0 0))
 
-(define-xwem-deffered xwem-worklog-dockapp-update-task-brick (dockapp)
+(define-xwem-deffered xwem-worklog-dockapp-update-task-brick (&optional 
dockapp)
   "Update DOCKAPP's current task brick."
+  (unless dockapp (setq dockapp xwem-worklog-default-dockapp))
+
   (when (and xwem-worklog-current-task
             (xwem-worklog-lookup-description
              (xwem-worklog-task-name xwem-worklog-current-task)))
@@ -1415,22 +1429,18 @@
      (or (plist-get (cadr (xwem-worklog-lookup-description
                           (xwem-worklog-task-name xwem-worklog-current-task)))
                    :color) "black"))
-    (XFillRectangle (xwem-dpy) (xwem-worklog-dockapp-win dockapp)
+    (XFillRectangle (xwem-dpy) (xwem-worklog-dockapp-pixmap dockapp)
                    (xwem-face-get-gc 'xwem-worklog-temp-face) 0 0 6 6)
-    ))
-    ;; Do we really need this?
-;    (XFillRectangle (xwem-dpy) (xwem-worklog-dockapp-mask dockapp)
-;                  xwem-misc-mask-fgc 0 0 6 6)
-;    (X-XShapeMask (xwem-dpy) (xwem-worklog-dockapp-win dockapp)
-;                X-XShape-Bounding X-XShapeInt 0 0
-;                (xwem-worklog-dockapp-mask dockapp))))
+    (xwem-worklog-dockapp-apply-pixmap dockapp)))
   
-(define-xwem-deffered xwem-worklog-dockapp-update (dockapp)
+(define-xwem-deffered xwem-worklog-dockapp-update (&optional dockapp)
   "Update worklog dockapp."
+  (unless dockapp (setq dockapp xwem-worklog-default-dockapp))
   (when (xwem-worklog-dockapp-p dockapp)
     (let* ((win (xwem-worklog-dockapp-win dockapp))
-           (mask (xwem-worklog-dockapp-mask dockapp))
            (xdpy (X-Win-dpy win))
+           (pix (xwem-worklog-dockapp-pixmap dockapp))
+           (mask (xwem-worklog-dockapp-mask dockapp))
            (w (xwem-worklog-dockapp-width dockapp))
            (h (xwem-worklog-dockapp-height dockapp))
            (sec-w (xwem-worklog-dockapp-sector-width dockapp))
@@ -1438,13 +1448,14 @@
            (spec-copy (xwem-worklog-generate-percentage-spec sec-w t t))
            td)
 
-      (XClearArea xdpy win 0 0 (+ 1 w) (+ 1 h (* 2 sec-w)) nil)
-      (XFillRectangle
-       xdpy mask xwem-misc-mask-bgc 0 0 (+ 1 w) (+ 1 h (* 2 sec-w)))
+      (XFillRectangle xdpy pix (XDefaultGC xdpy)
+                      0 0 (X-Pixmap-width pix) (X-Pixmap-height pix))
+      (XFillRectangle xdpy mask xwem-misc-mask-bgc
+                      0 0 (+ 1 w) (+ 1 h (* 2 sec-w)))
       (when spec
         (xwem-diag-draw-percentage
          xwem-worklog-dockapp-diagram-type
-         spec win (xwem-face-get-gc 'default)
+         spec pix (xwem-face-get-gc 'default)
          (/ sec-w 2) (/ sec-w 2) w h sec-w)
 
         (xwem-diag-draw-percentage
@@ -1460,19 +1471,20 @@
         (xwem-set-face-foreground 'xwem-worklog-temp-face
                                   (or (plist-get (cadr td) :color) "black"))
         (XFillRectangle
-        xdpy win (xwem-face-get-gc 'xwem-worklog-temp-face) 0 0 6 6)
+        xdpy pix (xwem-face-get-gc 'xwem-worklog-temp-face) 0 0 6 6)
         (XFillRectangle xdpy mask xwem-misc-mask-fgc 0 0 6 6))
       
       ;; Apply mask
-      (X-XShapeMask xdpy win X-XShape-Bounding X-XShapeSet 0 0 mask))))
+      (X-XShapeMask xdpy win X-XShape-Bounding X-XShapeSet 0 0 mask)
+      (xwem-worklog-dockapp-apply-pixmap dockapp))))
 
 (defun xwem-worklog-dockapp-event-handler (xdpy xwin xev)
   "Event handler for worklog dockapp."
   (let ((dockapp (X-Win-get-prop xwin 'xwem-worklog-dockapp)))
     (when (xwem-worklog-dockapp-p dockapp)
       (X-Event-CASE xev
-        ((:X-Expose :X-MapNotify)
-         (xwem-worklog-dockapp-update dockapp))
+        (:X-MapNotify (xwem-worklog-dockapp-update dockapp))
+        (:X-Expose (xwem-worklog-dockapp-apply-pixmap dockapp))
 
         ((:X-ButtonPress :X-ButtonRelease)
          (xwem-overriding-local-map xwem-worklog-dockapp-map
@@ -1507,8 +1519,26 @@
            (xwem-worklog-dockapp-win wd)
            1 (+ 1 w) (+ 1 h (* 2 sw))))
 
+    ;; Create storer pixmap
+    (setf (xwem-worklog-dockapp-pixmap wd)
+          (XCreatePixmap (xwem-dpy) (make-X-Pixmap
+                                     :dpy (xwem-dpy)
+                                     :id (X-Dpy-get-id (xwem-dpy)))
+                         (xwem-worklog-dockapp-win wd)
+                         (XDefaultDepth (xwem-dpy))
+                         (+ 1 w) (+ 1 (* 2 sw))))
+
     (X-Win-put-prop (xwem-worklog-dockapp-win wd) 'xwem-worklog-dockapp wd)
 
+    ;; Draw initial contents
+    (xwem-worklog-dockapp-update wd)
+
+    ;; Install turbo mode
+    (when xwem-misc-turbo-mode
+      (XSetWindowBackgroundPixmap (xwem-dpy) (xwem-worklog-dockapp-win wd)
+                                  (xwem-worklog-dockapp-pixmap wd)))
+
+    ;; Select for incoming events
     (XSelectInput (xwem-dpy) (xwem-worklog-dockapp-win wd)
                   (apply 'Xmask-or xwem-worklog-dockapp-event-mask))
     (X-Win-EventHandler-add
@@ -1526,17 +1556,43 @@
                         (xwem-worklog-meaning-update-time)
                         (xwem-worklog-meaning-update-time)))
 
+    ;; Set default worklog dockapp
+    (unless xwem-worklog-default-dockapp
+      (setq xwem-worklog-default-dockapp wd))
+
+    ;; Add hooks
     (add-hook 'xwem-worklog-task-start-hook
-             `(lambda () (xwem-worklog-dockapp-update-task-brick ,wd)))
+              'xwem-worklog-dockapp-apply-pixmap t)
+    (add-hook 'xwem-worklog-login-hook
+              'xwem-worklog-dockapp-apply-pixmap t)
+    (add-hook 'xwem-worklog-logout-hook
+              'xwem-worklog-dockapp-apply-pixmap t)
     wd))
 
-(defun xwem-worklog-dockapp-stop (dockapp)
+(defun xwem-worklog-dockapp-stop (dockapp &optional need-destroy)
   "Stop worklog dockapp."
   (when (xwem-worklog-dockapp-p dockapp)
-    (remove-hook 'xwem-worklog-task-start-hook
-                 `(lambda () (xwem-worklog-dockapp-update-task-brick 
,dockapp)))
+    (when (eq dockapp xwem-worklog-default-dockapp)
+      (setq xwem-worklog-default-dockapp nil))
+
+    ;; XXX 
+    (remove-hook 'xwem-worklog-task-start-hook 'xwem-worklog-dockapp-update)
+    (remove-hook 'xwem-worklog-login-hook 'xwem-worklog-dockapp-update)
+    (remove-hook 'xwem-worklog-logout-hook 'xwem-worklog-dockapp-update)
+
     (delete-itimer (xwem-worklog-dockapp-update-itimer dockapp))
     (X-Win-rem-prop (xwem-worklog-dockapp-win dockapp) 'xwem-worklog-dockapp)
+
+    ;; Release resources
+    (XFreePixmap (xwem-dpy) (xwem-worklog-dockapp-mask dockapp))
+    (XFreePixmap (xwem-dpy) (xwem-worklog-dockapp-pixmap dockapp))
+
+    ;; Remove events handler
+    (X-Win-EventHandler-rem (xwem-worklog-dockapp-win dockapp)
+                            'xwem-worklog-dockapp-event-handler)
+    (when need-destroy
+      (XDestroyWindow (xwem-dpy) (xwem-worklog-dockapp-win dockapp)))
+
     (X-invalidate-cl-struct dockapp)))
 
 (define-xwem-command xwem-worklog-task-info (task)
@@ -1567,9 +1623,10 @@
          (vector "Pause" `(xwem-worklog-pause nil))
          (vector "List tasks" `(xwem-worklog-task-list nil))
          "---"
-         (vector "Destroy" `(XDestroyWindow
-                             (xwem-dpy)
-                             ,(X-Event-xbutton-event xwem-last-xevent))))))
+         (vector "Destroy" `(xwem-worklog-dockapp-stop
+                             (X-Win-get-prop
+                              ,(X-Event-xbutton-event xwem-last-xevent)
+                              'xwem-worklog-dockapp) t)))))
 
 ;;; MISC
 (defun xwem-worklog-on-select-cl (&optional cl)




<Prev in Thread] Current Thread [Next in Thread>
  • Summary for xwem--main--2.1--patch-29, Zajcev Evgeny <=