Location: lg@xxxxxxxxxxxxxx http://arch.xwem.org/2005/
Revision: xwem--main--2.2--patch-10
Archive: lg@xxxxxxxxxxxxxx
Creator: Zajcev Evgeny <lg@xxxxxxxx>
Date: Fri May 6 08:37:29 MSD 2005
Standard-date: 2005-05-06 04:37:29 GMT
Modified-files: dockapp/xwem-time.el extra/xwem-mogu.el
extra/xwem-ratanot.el lisp/xwem-clgen.el
lisp/xwem-keyboard.el lisp/xwem-rooter.el
New-patches: lg@xxxxxxxxxxxxxx/xwem--main--2.2--patch-10
Summary: fixes, local-keymap client property added, rooter ranks
Keywords: local-keymap
* dockapp/xwem-time.el (xwem-time-popup-menu): [fix] Now
`xwem-time-popup-menu' has X window independent code. So it will popup
menu for non xwem-time window.
* lisp/xwem-clgen.el (xwem-clgen-activate-other): [fix] Select other
client properly in case when client attaches to other frame/window.
* lisp/xwem-keyboard.el (local-keymap): [new] Client property to set
client local keymap.
* lisp/xwem-rooter.el (xwem-rooter-always-on-top-spec): [change] Now has
pair rank, for inactive state and for active state.
* lisp/xwem-rooter.el (xwem-cl-rooter-p): [new] Return non-nil if CL is
rooter client.
* lisp/xwem-rooter.el (xwem-rooter-set-rank): [new] Set client rank
according to its state inactive or active.
* added files
{arch}/xwem/xwem--main/xwem--main--2.2/lg@xxxxxxxxxxxxxx/patch-log/patch-10
* modified files
--- orig/dockapp/xwem-time.el
+++ mod/dockapp/xwem-time.el
@@ -1197,7 +1197,7 @@
(list "Time"
(vector "Show Time" 'xwem-time-show-current-time-and-date)
"---"
- (vector "Destroy" `(xwem-time-remove , (X-Event-win
xwem-last-xevent))))))
+ (vector "Destroy" `(XDestroyWindow (xwem-dpy) ,(X-Event-win
xwem-last-xevent))))))
(provide 'xwem-time)
--- orig/extra/xwem-mogu.el
+++ mod/extra/xwem-mogu.el
@@ -64,6 +64,8 @@
(require 'xwem-load)
(require 'xwem-interactive)
+(require 'xlib-xshape)
+
(defgroup xwem-mogu nil
"Group to customize xwem mouse grid uberness."
:prefix "xwem-mogu-"
--- orig/extra/xwem-ratanot.el
+++ mod/extra/xwem-ratanot.el
@@ -196,6 +196,7 @@
(let ((xwem-special-default-strategy xwem-ratanot-special-display-strategy)
(buf (find-file-noselect (expand-file-name xwem-ratanot-file
xwem-dir))))
+ (declare (special xwem-special-default-strategy))
(set-symbol-value-in-buffer 'xwem-ratanot-minor-mode t buf)
(xwem-special-popup-frame buf)
--- orig/lisp/xwem-clgen.el
+++ mod/lisp/xwem-clgen.el
@@ -150,11 +150,18 @@
(define-xwem-deffered xwem-clgen-activate-other (cl win)
"Activate other client in WIN.
Clients list is either WIN's clients list or CL's win clients list if
-WIN's clients list is empty."
+WIN's clients list is empty and CL managed in frame where WIN."
(when (and (xwem-win-alive-p win)
(not (xwem-cl-alive-p (xwem-win-cl win))))
;; WIN is valid and no clients yet managed in WIN
- (let ((ocl (xwem-clgen-other-client cl (xwem-win-clients win)))
+ (let ((ocl (or (and (xwem-win-clients win) ; There clients to
+ (xwem-clgen-other-client cl (xwem-win-clients win)))
+ (and (xwem-win-alive-p (xwem-cl-win cl))
+ (eq (xwem-win-frame win)
+ (xwem-win-frame (xwem-cl-win cl)))
+ (xwem-win-clients (xwem-cl-win cl))
+ (xwem-clgen-other-client
+ cl (xwem-win-clients (xwem-cl-win cl))))))
(need-select (or (and (xwem-cl-selected-p cl)
(not (xwem-cl-active-p cl)))
(xwem-cl-selected-p (xwem-dummy-client)))))
--- orig/lisp/xwem-keyboard.el
+++ mod/lisp/xwem-keyboard.el
@@ -369,28 +369,39 @@
;;{{{ [-] local keymap
+(defun xwem-client-set-local-keymap (cl prop keymap)
+ (let ((nkeymap (xwem-kbd-fixup-keymap keymap))
+ (okeymap (xwem-local-map cl)))
+ (when (keymapp okeymap)
+ (xwem-focus-mode-invoke cl 'before-keymap-change)
+ ;; But avoid ungrabbing keymaps! Because it can use prefix
+ ;; keymap of some other command.
+ (xwem-kbd-uninstall-grab okeymap (xwem-cl-xwin cl)
+ #'(lambda (key def)
+ (not (keymapp (xwem-kbd-fixup-keymap
def))))))
+
+ ;; Install new keymap
+ (xwem-cl-put-prop cl prop keymap) ; save it in props
+ (when (keymapp nkeymap)
+ (xwem-kbd-install-grab nkeymap (xwem-cl-xwin cl))
+ (xwem-focus-mode-invoke cl 'after-keymap-change))))
+
+(defun xwem-client-get-local-keymap (cl prop)
+ (xwem-kbd-fixup-keymap (xwem-cl-get-prop cl prop)))
+
+(define-xwem-client-property local-keymap nil
+ "CL's local keymap."
+ :type 'keymap
+ :set 'xwem-client-set-local-keymap
+ :get 'xwem-client-get-local-keymap)
+
;;;###autoload
(defun xwem-local-map (cl)
"Return CL's local keymap."
- (when (xwem-cl-p cl)
- (xwem-kbd-fixup-keymap (xwem-client-property cl 'xwem-local-keymap))))
+ (xwem-client-property cl 'local-keymap))
(defsetf xwem-local-map (cl) (keymap)
"Set CL's local keymap to KEYMAP."
- `(let ((nkeymap (xwem-kbd-fixup-keymap ,keymap))
- (okeymap (xwem-local-map ,cl)))
- (when (keymapp okeymap)
- (xwem-focus-mode-invoke ,cl 'before-keymap-change)
- ;; But avoid ungrabbing keymaps! Because it can use prefix
- ;; keymap of some other command.
- (xwem-kbd-uninstall-grab okeymap (xwem-cl-xwin ,cl)
- #'(lambda (key def)
- (not (keymapp (xwem-kbd-fixup-keymap
def))))))
-
- ;; Install new keymap
- (xwem-client-set-property ,cl 'xwem-local-keymap nkeymap)
- (when (keymapp nkeymap)
- (xwem-kbd-install-grab nkeymap (xwem-cl-xwin ,cl))
- (xwem-focus-mode-invoke ,cl 'after-keymap-change))))
+ `(xwem-client-set-property ,cl 'local-keymap ,keymap))
;;;###autoload
(defun xwem-local-set-key (key command &optional cl pgrab-mode kgrab-mode)
--- orig/lisp/xwem-rooter.el
+++ mod/lisp/xwem-rooter.el
@@ -42,9 +42,9 @@
:prefix "xwem-rooter-"
:group 'xwem-modes)
-(defcustom xwem-rooter-always-on-top-spec '((((eval t)) . 30))
+(defcustom xwem-rooter-always-on-top-spec '((((eval t)) . (nil . 30)))
"*List of conscells in form:
-\(MATCH-SPEC . RANK) for always-on-top icons.
+\(MATCH-SPEC . \(INACTIVE-RANK . ACTIVE-RANK)) for always-on-top icons.
If MATCH-SPEC matches rooticon's client - than RANK is set as always
on top rank."
:type 'sexp
@@ -68,6 +68,11 @@
map)
"Keymap for rooter clients.")
+;;;###xwem-autoload
+(defun xwem-cl-rooter-p (cl)
+ "Return non-nil if CL is rooter client."
+ (eq (xwem-cl-manage-type cl) 'rooter))
+
;;;###autoload(autoload 'xwem-rooter-raise "xwem-rooter" nil t)
(define-xwem-command xwem-rooter-raise ()
"Raise rooter window."
@@ -81,8 +86,24 @@
(xwem-misc-lower-xwin (xwem-cl-xwin xwem-event-client)))
-;;;; Manage methods
+(defun xwem-rooter-set-rank (cl)
+ "Set always on top rank for CL, according to its state."
+ ;; Set apropriate always on top rank
+ (let ((rank (find cl xwem-rooter-always-on-top-spec
+ :key 'car :test 'xwem-cl-match-p)))
+ (case (xwem-cl-state cl)
+ (inactive
+ (if (cadr rank)
+ (xwem-misc-set-xwin-always-on-top (xwem-cl-xwin cl) (cadr rank))
+ (xwem-misc-unset-always-on-top (xwem-cl-xwin cl)))
+ (xwem-misc-lower-xwin (xwem-cl-xwin cl)))
+ (active
+ (if (cddr rank)
+ (xwem-misc-set-xwin-always-on-top (xwem-cl-xwin cl) (cddr rank))
+ (xwem-misc-unset-always-on-top (xwem-cl-xwin cl)))
+ (xwem-misc-raise-xwin (xwem-cl-xwin cl))))))
+;;;; Manage methods
;;;###autoload
(defun xwem-manage-rooter (cl)
"Manage rooter client CL."
@@ -97,12 +118,6 @@
(X-Geom-x (xwem-cl-xgeom cl))
(X-Geom-y (xwem-cl-xgeom cl)))
- ;; Set apropriate always on top rank
- (let ((rank (find cl xwem-rooter-always-on-top-spec
- :key 'car :test 'xwem-cl-match-p)))
- (when rank
- (xwem-misc-set-xwin-always-on-top xwin (cdr rank))))
-
(XMapWindow (xwem-dpy) (xwem-cl-xwin cl))
;; Setup client
@@ -117,13 +132,15 @@
"Activate method for rooter clients."
(when (eq type 'select)
(error 'xwem-error "Trying to select rooted client!!!"))
- (XMapWindow (xwem-dpy) (xwem-cl-xwin cl))
- (xwem-misc-raise-xwin (xwem-cl-xwin cl)))
+ (xwem-rooter-set-rank cl)
+ (xwem-misc-raise-xwin (xwem-cl-xwin cl))
+ (XMapWindow (xwem-dpy) (xwem-cl-xwin cl)))
(defun xwem-deactivate-rooter (cl &optional type)
"Deactivate method for rooter clients."
(when (eq type 'deselect)
(error 'xwem-error "Trying to deselect rooted client!!!"))
+ (xwem-rooter-set-rank cl)
(xwem-misc-lower-xwin (xwem-cl-xwin cl)))
|