xwem-devel
[Top] [All Lists]

Summary for xwem--main--2.1--patch-3

From: Zajcev Evgeny <lg@xxxxxxxx>
Subject: Summary for xwem--main--2.1--patch-3
Date: Sun, 16 Jan 2005 03:16:42 +0300 (MSK)
Location: lg@xxxxxxxxxxxxxx http://arch.xwem.org/2005/

Revision: xwem--main--2.1--patch-3
Archive: lg@xxxxxxxxxxxxxx
Creator: Zajcev Evgeny <lg@xxxxxxxx>
Date: Sun Jan 16 03:16:39 MSK 2005
Standard-date: 2005-01-16 00:16:39 GMT
Modified-files: lisp/xwem-tray.el utils/xwem-osd.el
New-patches: lg@xxxxxxxxxxxxxx/xwem--main--2.1--patch-3
Summary: osd fixes, enhancements
Keywords: osd, tray, offscreen, commit

* lisp/xwem-tray.el (xwem-tray-hide-dapp): [fix] Do not XUnmapWindow if
  dockapp already unmapped, prevents infinite UnmapNotify events loop.

* lisp/xwem-tray.el (xwem-tray-show-dapp): [fix] Do not XMapWindow if
  dockapp already mapped, prevents infinite MapNotify events loop.

* utils/xwem-osd.el (xwem-osd-apply-xmask): [new] Function to apply OSD
  mask to life.  Note: deffered.

* utils/xwem-osd.el (xwem-osd-show): Use xwem-osd-apply-xmask

* utils/xwem-osd.el (xwem-osd-arc-add): [bug] Fixed, forgot
  `xwem-osd-instance-show'.  Related to colours problem ignotus has.

* utils/xwem-osd.el (xwem-osd-rect-add): [bug] Fixed, forgot
  `xwem-osd-instance-show'.  Related to colours problem ignotus has.

* utils/xwem-osd.el (MOST): Use `xwem-osd-apply-xmask', so mask applied
  only once, prevents flicking.

* utils/xwem-osd.el (xwem-osd-offscreen): [new] Move OSD to offscreen to
  performe OSD operationgs in safety.  Copy of OSD is displayed on top of
  OSD.  Usefull to prevent OSD flicking, when redrawing.

* utils/xwem-osd.el (xwem-osd-commit): [new] Commit changes to OSD while
  OSD was in offscreen.

* added files

    {arch}/xwem/xwem--main/xwem--main--2.1/lg@xxxxxxxxxxxxxx/patch-log/patch-3

* modified files

--- orig/lisp/xwem-tray.el
+++ mod/lisp/xwem-tray.el
@@ -493,10 +493,12 @@
                                         (X-Geom-y (xwem-dapp-geom dapp)))))))
             xwem-tray-dapp-list))))
 
-(defun xwem-tray-hide-dapp (hide-dapp)
-  "Hide dockapp DAPP temporary."
+(defun xwem-tray-hide-dapp (hide-dapp &optional unmap-p)
+  "Hide dockapp DAPP temporary.
+Non-nil UNMAP-P mean dockapp already unmapped."
   (unless (eq (xwem-dapp-state hide-dapp) 'hidden)
-    (XUnmapWindow (xwem-dpy) (xwem-dapp-xwin hide-dapp))
+    (unless unmap-p
+      (XUnmapWindow (xwem-dpy) (xwem-dapp-xwin hide-dapp)))
     (setf (xwem-dapp-state hide-dapp) 'hidden)
 
     (let ((dgeom (xwem-dapp-geom hide-dapp)))
@@ -522,10 +524,12 @@
                                           (X-Geom-y (xwem-dapp-geom 
dapp))))))))
             xwem-tray-dapp-list))))
 
-(defun xwem-tray-show-dapp (show-dapp)
-  "Show dockapp SHOW-DAPP that was hidden temporary."
+(defun xwem-tray-show-dapp (show-dapp &optional map-p)
+  "Show dockapp SHOW-DAPP that was hidden temporary.
+Non-nil MAP-P mean dock app already mapped."
   (unless (eq (xwem-dapp-state show-dapp) 'shown)
-    (XMapWindow (xwem-dpy) (xwem-dapp-xwin show-dapp))
+    (unless map-p
+      (XMapWindow (xwem-dpy) (xwem-dapp-xwin show-dapp)))
     (setf (xwem-dapp-state show-dapp) 'shown)
   
     (let ((dgeom (xwem-dapp-geom show-dapp)))
@@ -780,12 +784,12 @@
     (:X-UnmapNotify
      (let ((dapp (xwem-tray-find-dapp (X-Event-xunmap-window xev))))
        (when (xwem-dapp-alive-p dapp)
-         (xwem-tray-hide-dapp dapp))))
+         (xwem-tray-hide-dapp dapp t))))
 
     (:X-MapNotify
      (let ((dapp (xwem-tray-find-dapp (X-Event-xunmap-window xev))))
        (when (xwem-dapp-alive-p dapp)
-         (xwem-tray-show-dapp dapp))))
+         (xwem-tray-show-dapp dapp t))))
     
     (:X-ConfigureNotify
      (when (eq (X-Event-xconfigure-window xev)


--- orig/utils/xwem-osd.el
+++ mod/utils/xwem-osd.el
@@ -162,6 +162,11 @@
   (setf (xwem-osd-plist osd)
         (plist-remprop (xwem-osd-plist osd) prop)))
 
+(defmacro xwem-osd-xwin-copy (osd)
+  `(xwem-osd-get-prop ,osd 'xwin-copy))
+(defsetf xwem-osd-xwin-copy (osd) (xwin)
+  `(xwem-osd-put-prop ,osd 'xwin-copy ,xwin))
+
 
 ;;; Functions
 (defun xwem-osd-event-handler (xdpy xwin xev)
@@ -419,7 +424,7 @@
 
 (defun xwem-osd-show (osd)
   "Show OSD's window."
-  (X-XShapeMask (xwem-osd-xdpy osd) (xwem-osd-xwin osd) X-XShape-Bounding 
X-XShapeSet 0 0 (xwem-osd-xmask osd))
+  (xwem-osd-apply-xmask-1 osd)
   (XMapWindow (xwem-osd-xdpy osd) (xwem-osd-xwin osd))
   (XRaiseWindow (xwem-osd-xdpy osd) (xwem-osd-xwin osd))
 
@@ -482,7 +487,10 @@
   "Clear OSD window."
   (xwem-osd-destroy-instances osd)
   (xwem-osd-clear-mask osd)
+  (xwem-osd-apply-xmask osd))
 
+(define-xwem-deffered xwem-osd-apply-xmask (osd)
+  "Apply OSD's mask to life."
   (X-XShapeMask (xwem-osd-xdpy osd) (xwem-osd-xwin osd)
                X-XShape-Bounding X-XShapeSet 0 0 (xwem-osd-xmask osd)))
 
@@ -498,9 +506,7 @@
     (xwem-osd-clear-mask osd)
     (XDrawString xdpy (xwem-osd-xmask osd) (xwem-osd-mask-gc osd)
                 0 yoff string)
-    (X-XShapeMask xdpy (xwem-osd-xwin osd)
-                 X-XShape-Bounding X-XShapeSet 0 0 (xwem-osd-xmask osd))
-    ))
+    (xwem-osd-apply-xmask osd)))
 
 (defun xwem-osd-color-text (osd strspec-list)
   "In OSD's win draw colored text specified by STRSPEC-LIST."
@@ -514,8 +520,7 @@
                 (xwem-osd-set-xwin-color osd (cdr strspec))
                 (XDrawString xdpy (xwem-osd-xmask osd) (xwem-osd-mask-gc osd)
                              0 yoff str)
-                (X-XShapeMask xdpy (xwem-osd-xwin osd)
-                              X-XShape-Bounding X-XShapeSet 0 0 
(xwem-osd-xmask osd))
+                (xwem-osd-apply-xmask osd)
                
                 (setq curstr (concat curstr (car strspec)))))
             strspec-list)))
@@ -539,8 +544,7 @@
     ;; Update window shape
     (XDrawString xdpy (xwem-osd-xmask osd) (xwem-osd-mask-gc osd)
                 x (+ y yoff) string)
-    (X-XShapeMask xdpy (xwem-osd-xwin osd)
-                 X-XShape-Bounding X-XShapeUnion 0 0 (xwem-osd-xmask osd))
+    (xwem-osd-apply-xmask osd)
     osin))
 
 (defun xwem-osd-set-line-width (osd new-line-width)
@@ -569,8 +573,7 @@
     ;; Update OSD window shape
     (XDrawLine xdpy (xwem-osd-xmask osd) (xwem-osd-mask-gc osd)
               x0 y0 x1 y1)
-    (X-XShapeMask (xwem-osd-xdpy osd) (xwem-osd-xwin osd)
-                 X-XShape-Bounding X-XShapeUnion 0 0 (xwem-osd-xmask osd))
+    (xwem-osd-apply-xmask osd)
     osin))
 
 (defun xwem-osd-dots-add (osd dots type &optional depth color)
@@ -590,8 +593,7 @@
     ;; Update OSD window shape
     (xwem-diag-plot-dots type (xwem-osd-xmask osd) (xwem-osd-mask-gc osd)
                          0 (xwem-osd-height osd) dots)
-    (X-XShapeMask (xwem-osd-xdpy osd) (xwem-osd-xwin osd)
-                 X-XShape-Bounding X-XShapeUnion 0 0 (xwem-osd-xmask osd))
+    (xwem-osd-apply-xmask osd)
     osin))
 
 (defun xwem-osd-arc-add (osd xarc &optional depth color)
@@ -606,12 +608,12 @@
               (list xarc))
     (X-XShapeMask xdpy (xwem-osd-instance-xwin osin)
                  X-XShape-Bounding X-XShapeSet 0 0 (xwem-osd-instance-xmask 
osin))
+    (xwem-osd-instance-show osin)
 
     ;; Update OSD shape
     (XDrawArcs xdpy (xwem-osd-xmask osd) (xwem-osd-mask-gc osd)
               (list xarc))
-    (X-XShapeMask (xwem-osd-xdpy osd) (xwem-osd-xwin osd)
-                 X-XShape-Bounding X-XShapeUnion 0 0 (xwem-osd-xmask osd))
+    (xwem-osd-apply-xmask osd)
     osin))
 
 (defun xwem-osd-rect-add (osd x y width height &optional depth color fill-p)
@@ -628,13 +630,13 @@
                      fill-p)
     (X-XShapeMask xdpy (xwem-osd-instance-xwin osin)
                  X-XShape-Bounding X-XShapeSet 0 0 (xwem-osd-instance-xmask 
osin))
+    (xwem-osd-instance-show osin)
 
     ;; Update OSD shape
     (XDrawRectangles xdpy (xwem-osd-xmask osd) (xwem-osd-mask-gc osd)
                      (list (make-X-Rect :x x :y y :width width :height height))
                      fill-p)
-    (X-XShapeMask (xwem-osd-xdpy osd) (xwem-osd-xwin osd)
-                 X-XShape-Bounding X-XShapeUnion 0 0 (xwem-osd-xmask osd))
+    (xwem-osd-apply-xmask osd)
     osin))
 
 (defun xwem-osd-icon-data-add (osd xpm-data &optional x y depth)
@@ -670,8 +672,7 @@
 
       ;; Update OSD shape
       (XImagePut xdpy gc (xwem-osd-xmask osd) x y ximg-shape)
-      (X-XShapeMask (xwem-osd-xdpy osd) (xwem-osd-xwin osd)
-                    X-XShape-Bounding X-XShapeUnion 0 0 (xwem-osd-xmask osd)))
+      (xwem-osd-apply-xmask osd))
     (XFreeGC xdpy gc)
 
     ;; Draw Image
@@ -696,6 +697,30 @@
 
   (xwem-osd-icon-data-add osd xpm-data x y depth)))
 
+(defun xwem-osd-offscreen (osd)
+  "Put OSD off the screen, displaying OSD copy.
+Usefull to prevent flicking."
+  (if (xwem-osd-xwin-copy osd)
+      (XResizeWindow (xwem-osd-xdpy osd) (xwem-osd-xwin-copy osd)
+                     (xwem-osd-width osd) (xwem-osd-height osd))
+    (setf (xwem-osd-xwin-copy osd)
+          (XCreateWindow (xwem-osd-xdpy osd) (xwem-osd-xwin osd)
+                         0 0
+                         (xwem-osd-width osd) (xwem-osd-height osd)
+                         0
+                         nil nil nil (make-X-Attr :override-redirect t))))
+
+  (XCopyArea (xwem-osd-xdpy osd)
+             (xwem-osd-xwin osd) (xwem-osd-xwin-copy osd)
+             (xwem-osd-gc osd)
+             0 0 (xwem-osd-width osd) (xwem-osd-height osd)
+             0 0)
+  (XMapWindow (xwem-osd-xdpy osd) (xwem-osd-xwin-copy osd)))
+
+(defun xwem-osd-commit (osd)
+  "Commit changes made while OSD was in off screen."
+  (XUnmapWindow (xwem-osd-xdpy osd) (xwem-osd-xwin-copy osd)))
+
 ;;; You might consider more powerfull `working' package, which is part
 ;;; of CEDET.
 (defun xwem-osd-working-bar-display (tot-len percents)




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