Location: lg@xxxxxxxxxxxxxx http://arch.xwem.org/2005/
Revision: xwem--main--2.2--patch-33
Archive: lg@xxxxxxxxxxxxxx
Creator: Zajcev Evgeny <lg@xxxxxxxx>
Date: Sun Sep 25 02:51:54 MSD 2005
Standard-date: 2005-09-24 22:51:54 GMT
Modified-files: extra/xwem-frametrans.el
lisp/xwem-clients.el lisp/xwem-focus.el
lisp/xwem-netwm.el lisp/xwem-tabbing.el
New-patches: lg@xxxxxxxxxxxxxx/xwem--main--2.2--patch-33
Summary: Another bunch of fixes, enhances
Keywords: follow-mouse, fullscreen
* lisp/xwem-clients.el (on-kill): New default method. Switch to other
client if selected client has been destroyed.
* lisp/xwem-focus.el (follow-mouse): More careful handling for
leave/enter. Ignore entering for client if this client just leaved ..
* lisp/xwem-netwm.el (xwem-toggle-fullscreen): [fix] Do things in more
intelligent way.
* lisp/xwem-tabbing.el (xwem-tabber-draw-format): Draw outliner around
tab.
* added files
{arch}/xwem/xwem--main/xwem--main--2.2/lg@xxxxxxxxxxxxxx/patch-log/patch-33
* modified files
--- orig/extra/xwem-frametrans.el
+++ mod/extra/xwem-frametrans.el
@@ -108,24 +108,25 @@
(defun xwem-ft-mask-init (frame &optional ft-properties)
"Initialize transparency mask for FRAME."
- (let* ((xpx (XCreatePixmap (xwem-dpy) (xwem-frame-xwin frame) 1
- (xwem-frame-width frame) (xwem-frame-height
frame)))
- (gc xwem-misc-mask-fgc)
- (bgc xwem-misc-mask-bgc))
-
- (XFillRectangle (xwem-dpy) xpx gc 0 0
- (xwem-frame-width frame)
- (xwem-frame-height frame))
- (xwem-frame-put-prop frame 'xwem-frame-ft
- (make-xwem-frame-ft :frame frame
- :mask xpx
- :gc gc
- :bgc bgc
- :saved-height (xwem-frame-height frame)
- :saved-width (xwem-frame-width frame)
- :plist ft-properties))
-
- (xwem-ft-fill-mask frame)))
+ (unless (and (xwem-frame-p frame)
+ (xwem-frame-get-prop frame 'xwem-frame-ft))
+ (let* ((xpx (XCreatePixmap (xwem-dpy) (xwem-frame-xwin frame) 1
+ (xwem-frame-width frame) (xwem-frame-height
frame)))
+ (gc xwem-misc-mask-fgc)
+ (bgc xwem-misc-mask-bgc))
+
+ (XFillRectangle (xwem-dpy) xpx gc 0 0
+ (xwem-frame-width frame)
+ (xwem-frame-height frame))
+ (xwem-frame-put-prop frame 'xwem-frame-ft
+ (make-xwem-frame-ft :frame frame
+ :mask xpx
+ :gc gc
+ :bgc bgc
+ :saved-height (xwem-frame-height frame)
+ :saved-width (xwem-frame-width frame)
+ :plist ft-properties))
+ (xwem-ft-fill-mask frame))))
(define-xwem-deffered xwem-ft-mask-resize (frame)
"Resize FRAME's transparency mask."
@@ -152,9 +153,10 @@
"Denitialize transparency mask for FRAME."
(let* ((xff (and (xwem-frame-p frame)
(xwem-frame-get-prop frame 'xwem-frame-ft)))
- (xpx (xwem-frame-ft-mask xff)))
+ (xpx (and xff (xwem-frame-ft-mask xff))))
(xwem-frame-rem-prop frame 'xwem-frame-ft)
- (XFreePixmap (xwem-dpy) xpx)
+ (when xpx
+ (XFreePixmap (xwem-dpy) xpx))
(X-XShapeMask (xwem-dpy) (xwem-frame-xwin frame)
X-XShape-Bounding X-XShapeSet 0 0 nil)))
--- orig/lisp/xwem-clients.el
+++ mod/lisp/xwem-clients.el
@@ -2302,6 +2302,9 @@
"Default other-client method."
(xwem-cl-other cl))
+(define-xwem-method on-kill default (cl)
+ (xwem-select-last-or-other-client cl))
+
;;; Dummy client, used, when selecting `nil' client.
(defvar xwem-dummy-client nil
--- orig/lisp/xwem-focus.el
+++ mod/lisp/xwem-focus.el
@@ -171,6 +171,8 @@
(quote ,fun))))))
(put 'define-xwem-focus-mode 'lisp-indent-function 'defun)
+(defvar xwem-focus-last-client-leaved nil)
+
;;;###xwem-autoload
(defun xwem-focus-mode-invoke (cl &rest args)
"Invoke CL's focus mode function with ARGS.
@@ -187,10 +189,18 @@
'after-keymap-change - After CL's local map changed.
"
(when (xwem-cl-p cl)
- (let* ((mode (xwem-client-property cl 'xwem-focus-mode))
- (fun (get mode 'xwem-focus-mode)))
- (when fun
- (apply fun cl args)))))
+ (let ((ignore-invoke nil)
+ fun)
+ (when (eq (car args) 'leave)
+ (setq xwem-focus-last-client-leaved cl))
+ (when (and (eq (car args) 'enter)
+ (eq cl xwem-focus-last-client-leaved))
+ (setq ignore-invoke t))
+
+ (unless ignore-invoke
+ (setq fun (get (xwem-client-property cl 'xwem-focus-mode)
'xwem-focus-mode))
+ (when fun
+ (apply fun cl args))))))
;;;###xwem-autoload
(defun xwem-focus-mode-set (cl &optional mode)
@@ -204,9 +214,8 @@
(define-xwem-focus-mode follow-mouse (cl action &optional xev)
"Focus follow mouse"
(cond ((and (eq action 'enter)
- (eq (X-Event-xcrossing-mode xev) X-NotifyNormal))
- (xwem-select-client cl))
- ))
+ (= (X-Event-xcrossing-mode xev) X-NotifyNormal))
+ (xwem-select-client cl))))
;;; Click to focus model
(defvar xwem-focus-click-to-focus-map
--- orig/lisp/xwem-netwm.el
+++ mod/lisp/xwem-netwm.el
@@ -424,8 +424,9 @@
(xwem-cl-put-prop cl prop val)
(if val
- (xwem-client-resize cl (X-Geom-width (xwem-cl-initial-xgeom cl))
- (X-Geom-height (xwem-cl-initial-xgeom cl)))
+ (let ((ig (xwem-cl-initial-xgeom cl)))
+ (xwem-client-move-resize cl (X-Geom-x ig) (X-Geom-y ig)
+ (X-Geom-width ig) (X-Geom-height ig)))
(xwem-refit cl)))
(defun xwem-fullscreen-set-fs-avoid-minib-overlap (cl prop val)
@@ -596,20 +597,22 @@
(xwem-interactive (list (xwem-cl-selected)))
(let ((xwin (xwem-cl-xwin cl)))
- (cond ((and (eq (xwem-cl-manage-type cl) 'fullscreen)
- (or (null force) (eq force 'off)))
- (xwem-nwm-set-state xwin nil)
- (let ((mspec (xwem-manda-find-match-1 cl
xwem-manage-internal-list)))
- (if (and mspec (not (eq (car mspec) 'fullscreen)))
- ;; If there some other than 'fullscreen manda entry - use it!
- (xwem-client-change-manage-type cl mspec)
- ;; Otherwise try default 'generic manda
- (xwem-client-change-manage-type cl '(generic)))))
-
- ((and (not (eq (xwem-cl-manage-type cl) 'fullscreen))
- (or (null force) (eq force 'on)))
+ (cond ((or (eq force 'on)
+ (and (null force)
+ (or (not (xwem-cl-fullscreen-p cl))
+ (and (xwem-cl-fullscreen-p cl)
+ (xwem-client-property cl 'fs-real-size)))))
+ (xwem-client-set-property cl 'fs-real-size nil)
(xwem-nwm-set-state xwin _NET_WM_STATE_FULLSCREEN)
- (xwem-client-change-manage-type cl '(fullscreen))))))
+ (xwem-client-change-manage-type cl '(fullscreen)))
+
+ ((or (eq force 'off)
+ (and (null force)
+ (xwem-cl-fullscreen-p cl)
+ (not (xwem-client-property cl 'fs-real-size))))
+ (xwem-client-set-property cl 'fs-real-size t)
+ (xwem-nwm-set-state xwin nil)
+ (xwem-client-change-manage-type cl (xwem-manda-find-match cl))))))
;;;###autoload(autoload 'xwem-switch-to-fullscreen-cl "xwem-netwm" nil t)
(define-xwem-command xwem-switch-to-fullscreen-cl ()
--- orig/lisp/xwem-tabbing.el
+++ mod/lisp/xwem-tabbing.el
@@ -724,18 +724,26 @@
(/ (- (+ (X-Rect-x rect) (X-Rect-width rect)) xoff) 2))
(X-Rect-y rect))
+ ;; Draw tab outliner
(let ((ldgc (xwem-face-get-gc (xwem-cl-tab-face cl)
(cons 'delimiter-left tag-set) cl))
(rdgc (xwem-face-get-gc (xwem-cl-tab-face cl)
(cons 'delimiter-right tag-set) cl)))
- (XDrawLine (xwem-dpy) xpcop ldgc
- (X-Rect-x rect) (X-Rect-y rect)
- (X-Rect-x rect) (+ (X-Rect-y rect) (X-Rect-height rect)))
- (XDrawLine (xwem-dpy) xpcop rdgc
- (+ -1 (X-Rect-x rect) (X-Rect-width rect))
- (X-Rect-y rect)
- (+ -1 (X-Rect-x rect) (X-Rect-width rect))
- (+ (X-Rect-y rect) (X-Rect-height rect))))
+ (XDrawSegments (xwem-dpy) xpcop ldgc
+ (list (cons (cons (X-Rect-x rect) (X-Rect-y rect))
+ (cons (X-Rect-x rect) (1- (+ (X-Rect-y
rect) (X-Rect-height rect)))))
+ (cons (cons (X-Rect-x rect) (X-Rect-y rect))
+ (cons (- (+ (X-Rect-x rect) (X-Rect-width
rect)) 1) (X-Rect-y rect)))))
+ (XDrawSegments (xwem-dpy) xpcop rdgc
+ (list (cons (cons (X-Rect-x rect)
+ (1- (+ (X-Rect-y rect) (X-Rect-height
rect))))
+ (cons (- (+ (X-Rect-x rect) (X-Rect-width
rect)) 1)
+ (1- (+ (X-Rect-y rect) (X-Rect-height
rect)))))
+ (cons (cons (- (+ (X-Rect-x rect) (X-Rect-width
rect)) 1)
+ (X-Rect-y rect))
+ (cons (- (+ (X-Rect-x rect) (X-Rect-width
rect)) 1)
+ (1- (+ (X-Rect-y rect) (X-Rect-height
rect)))))
+ )))
;; Finally apply change to xwin
(when force-update
|