xwem-patches
[Top] [All Lists]

Summary for xwem--main--2.2--patch-10

From: Zajcev Evgeny <lg@xxxxxxxx>
Subject: Summary for xwem--main--2.2--patch-10
Date: Fri, 6 May 2005 08:37:34 +0400 (MSD)
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)))
 
 




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