Location: lg@xxxxxxxxxxxxxx http://arch.xwem.org/2005/
Revision: xwem--main--2.1--patch-30
Archive: lg@xxxxxxxxxxxxxx
Creator: Zajcev Evgeny <lg@xxxxxxxx>
Date: Fri Mar 4 02:11:48 MSK 2005
Standard-date: 2005-03-03 23:11:48 GMT
Modified-files: extra/xwem-keytt.el extra/xwem-ratanot.el
extra/xwem-rooticon.el lisp/xwem-clients.el
lisp/xwem-events.el lisp/xwem-frame.el
lisp/xwem-keyboard.el lisp/xwem-keymacro.el
lisp/xwem-minibuffer.el lisp/xwem-misc.el
lisp/xwem-netwm.el lisp/xwem-rooter.el
lisp/xwem-special.el lisp/xwem-transient.el
utils/xwem-holer.el utils/xwem-osd.el
utils/xwem-worklog.el
New-patches: dev@xxxxxxxxxxxxxxxx/xwem--dev--2.1--patch-26
lg@xxxxxxxxxxxxxx/xwem--main--2.1--patch-30
Summary: merge from ckent, window stack introduced, fixes
Keywords: worklog, keyboard, keytt, stack
Keyboard (lisp/xwem-keyboard.el lisp/xwem-keymacro.el lisp/xwem-events.el):
Special tag <self-insert> introduced. When some key has self-insert as
prefix - all following keys directly sent to client (omiting xwem
commands looking up). This was done to avoid cross bindings problem in
xwem-keytt. To define self-insert keys, use something like:
(kbd "<self-insert> H-x o") ; Send `H-x o' directly to client
Stacking (lisp/xwem-misc.el):
New, each X window can have special property - always-on-top-rank
(number). This number denotes X window position in virtualized windows
stack. So it always to make some window be always on top.
Worklog (utils/xwem-worklog.el):
Bug fix, Thanks to Steve!
KeyTT (extra/xwem-keytt.el):
All bindings are <self-insert> now to avoid cross binding problems.
* lisp/xwem-frame.el (xwem-frame-at): [bug typo fix sem] New argument
MAPED-P added - if non-nil only maped frames are examined.
* lisp/xwem-minibuffer.el (xwem-minibiffer-always-on-top-rank): [new]
Rank in stack for minibuffer. By default - xwem minibuffer is always
on top (rank = 20).
* lisp/xwem-rooter.el (xwem-rooter-always-on-top-spec): [new] MATCH-SPEC
for always on top rooters. To make xclock to be always on top - use
something like:
(setq xwem-rooter-always-on-top-spec
'((application "xclock")))
* added files
{arch}/xwem/xwem--dev/xwem--dev--2.1/dev@xxxxxxxxxxxxxxxx/patch-log/patch-26
{arch}/xwem/xwem--main/xwem--main--2.1/lg@xxxxxxxxxxxxxx/patch-log/patch-30
* modified files
--- orig/extra/xwem-keytt.el
+++ mod/extra/xwem-keytt.el
@@ -137,19 +137,19 @@
;; Universal argument, so `C-5 C-n' for exampl will emulate five `C-n'
(xwem-keytt-define-universal-argument-commands xwem-keytt-gv-keymap)
-(define-key xwem-keytt-gv-keymap (kbd "C-x C-f") (kbd "o")) ; open
-(define-key xwem-keytt-gv-keymap (kbd "C-x C-c") (kbd "q")) ; exit
-(define-key xwem-keytt-gv-keymap (kbd "C-x C-w") (kbd "s")) ; save marked
-(define-key xwem-keytt-gv-keymap (kbd "C-x C-s") (kbd "S")) ; save
-(define-key xwem-keytt-gv-keymap (kbd "M-<") (kbd "<home>")) ; goto first page
-(define-key xwem-keytt-gv-keymap (kbd "M->") (kbd "<end>")) ; goto last page
-(define-key xwem-keytt-gv-keymap (kbd "C-l") (kbd "V")) ; center page
-(define-key xwem-keytt-gv-keymap (kbd "C-n") (kbd "Sh-<down>")) ; scroll down
-(define-key xwem-keytt-gv-keymap (kbd "C-p") (kbd "Sh-<up>")) ; scroll up
-(define-key xwem-keytt-gv-keymap (kbd "C-v") (kbd "<next>"))
-(define-key xwem-keytt-gv-keymap (kbd "M-v") (kbd "<prior>"))
-(define-key xwem-keytt-gv-keymap (kbd "C-<SPC>") (kbd "M")) ; mark page
-(define-key xwem-keytt-gv-keymap (kbd "C-g") (kbd "N")) ; unmark page
+(define-key xwem-keytt-gv-keymap (kbd "C-x C-f") (kbd "<self-insert> o")) ;
open
+(define-key xwem-keytt-gv-keymap (kbd "C-x C-c") (kbd "<self-insert> q")) ;
exit
+(define-key xwem-keytt-gv-keymap (kbd "C-x C-w") (kbd "<self-insert> s")) ;
save marked
+(define-key xwem-keytt-gv-keymap (kbd "C-x C-s") (kbd "<self-insert> S")) ;
save
+(define-key xwem-keytt-gv-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ;
goto first page
+(define-key xwem-keytt-gv-keymap (kbd "M->") (kbd "<self-insert> <end>")) ;
goto last page
+(define-key xwem-keytt-gv-keymap (kbd "C-l") (kbd "<self-insert> V")) ; center
page
+(define-key xwem-keytt-gv-keymap (kbd "C-n") (kbd "<self-insert> Sh-<down>"))
; scroll down
+(define-key xwem-keytt-gv-keymap (kbd "C-p") (kbd "<self-insert> Sh-<up>")) ;
scroll up
+(define-key xwem-keytt-gv-keymap (kbd "C-v") (kbd "<self-insert> <next>"))
+(define-key xwem-keytt-gv-keymap (kbd "M-v") (kbd "<self-insert> <prior>"))
+(define-key xwem-keytt-gv-keymap (kbd "C-<SPC>") (kbd "<self-insert> M")) ;
mark page
+(define-key xwem-keytt-gv-keymap (kbd "C-g") (kbd "<self-insert> N")) ; unmark
page
;; FIREFOX
@@ -158,19 +158,30 @@
(xwem-keytt-add-keymap '((application "firefox")) xwem-keytt-firefox-keymap t)
(xwem-keytt-define-universal-argument-commands xwem-keytt-firefox-keymap)
-(define-key xwem-keytt-firefox-keymap (kbd "C-x C-f") (kbd "C-l")) ; open url
-(define-key xwem-keytt-firefox-keymap (kbd "C-n") (kbd "<down>")) ; scroll down
-(define-key xwem-keytt-firefox-keymap (kbd "C-p") (kbd "<up>")) ; scroll up
-(define-key xwem-keytt-firefox-keymap (kbd "C-f") (kbd "<right>")) ; scroll
right
-(define-key xwem-keytt-firefox-keymap (kbd "C-b") (kbd "<left>")) ; scroll left
-(define-key xwem-keytt-firefox-keymap (kbd "C-v") (kbd "<next>")) ; scroll
page down
-(define-key xwem-keytt-firefox-keymap (kbd "M-v") (kbd "<prior>")) ; scroll
page up
-(define-key xwem-keytt-firefox-keymap (kbd "M->") (kbd "<end>")) ; goto end
-(define-key xwem-keytt-firefox-keymap (kbd "M-<") (kbd "<home>")) ; goto home
-(define-key xwem-keytt-firefox-keymap (kbd "C-s") (kbd "/")) ; search
-(define-key xwem-keytt-firefox-keymap (kbd "C-g") (kbd "<esc>")) ; cancel
search
-(define-key xwem-keytt-firefox-keymap (kbd "C-x [") (kbd "M-<left>")) ; back
-(define-key xwem-keytt-firefox-keymap (kbd "C-x ]") (kbd "M-<right>")) ;
forward
+(define-key xwem-keytt-firefox-keymap (kbd "C-x C-f") (kbd "<self-insert>
C-l")) ; open url
+(define-key xwem-keytt-firefox-keymap (kbd "C-x C-s") (kbd "<self-insert>
C-s")) ; save url
+(define-key xwem-keytt-firefox-keymap (kbd "C-x k") (kbd "<self-insert> C-w"))
; close
+(define-key xwem-keytt-firefox-keymap (kbd "C-n") (kbd "<self-insert>
<down>")) ; scroll down
+(define-key xwem-keytt-firefox-keymap (kbd "C-p") (kbd "<self-insert> <up>"))
; scroll up
+(define-key xwem-keytt-firefox-keymap (kbd "C-f") (kbd "<self-insert>
<right>")) ; scroll right
+(define-key xwem-keytt-firefox-keymap (kbd "C-b") (kbd "<self-insert>
<left>")) ; scroll left
+(define-key xwem-keytt-firefox-keymap (kbd "C-/") (kbd "<self-insert> C-z")) ;
undo
+(define-key xwem-keytt-firefox-keymap (kbd "C-v") (kbd "<self-insert>
<next>")) ; scroll page down
+(define-key xwem-keytt-firefox-keymap (kbd "M-v") (kbd "<self-insert>
<prior>")) ; scroll page up
+(define-key xwem-keytt-firefox-keymap (kbd "M->") (kbd "<self-insert> <end>"))
; goto end
+(define-key xwem-keytt-firefox-keymap (kbd "M-<") (kbd "<self-insert>
<home>")) ; goto home
+(define-key xwem-keytt-firefox-keymap (kbd "C-s") (kbd "<self-insert> /")) ;
search
+(define-key xwem-keytt-firefox-keymap (kbd "M-C-s") (kbd "<self-insert>
<F3>")) ; next search
+(define-key xwem-keytt-firefox-keymap (kbd "M-C-r") (kbd "<self-insert>
Sh-<F3>")) ; prev search
+(define-key xwem-keytt-firefox-keymap (kbd "C-g") (kbd "<self-insert> <esc>"))
; cancel search
+(define-key xwem-keytt-firefox-keymap (kbd "C-x [") (kbd "<self-insert>
M-<left>")) ; back
+(define-key xwem-keytt-firefox-keymap (kbd "C-x ]") (kbd "<self-insert>
M-<right>")) ; forward
+(define-key xwem-keytt-firefox-keymap (kbd "+") (kbd "<self-insert> C-+")) ;
zoom in
+(define-key xwem-keytt-firefox-keymap (kbd "-") (kbd "<self-insert> C--")) ;
zoom out
+(define-key xwem-keytt-firefox-keymap (kbd "=") (kbd "<self-insert> C-0")) ;
normal size
+(define-key xwem-keytt-firefox-keymap (kbd "M-\\") (kbd "<self-insert> C-i"))
; page info
+(define-key xwem-keytt-firefox-keymap (kbd "\\") (kbd "<self-insert> C-u")) ;
page source
+(define-key xwem-keytt-firefox-keymap (kbd "C-x r m") (kbd "<self-insert>
C-d")) ; Add bookmark
;; ACROREAD
@@ -179,21 +190,21 @@
(xwem-keytt-add-keymap '((application "acroread")) xwem-keytt-acroread-keymap
t)
(xwem-keytt-define-universal-argument-commands xwem-keytt-acroread-keymap)
-(define-key xwem-keytt-acroread-keymap (kbd "C-x C-f") (kbd "C-o")) ; open file
-(define-key xwem-keytt-acroread-keymap (kbd "C-x C-c") (kbd "C-q")) ; quit
-(define-key xwem-keytt-acroread-keymap (kbd "C-x C-s") (kbd "C-S")) ; save copy
-(define-key xwem-keytt-acroread-keymap (kbd "C-x k") (kbd "C-w")) ; close file
-(define-key xwem-keytt-acroread-keymap (kbd "C-n") (kbd "<down>")) ; scroll
down
-(define-key xwem-keytt-acroread-keymap (kbd "C-p") (kbd "<up>")) ; scroll up
-(define-key xwem-keytt-acroread-keymap (kbd "C-v") (kbd "<right>")) ; next page
-(define-key xwem-keytt-acroread-keymap (kbd "M-v") (kbd "<left>")) ; prev page
-(define-key xwem-keytt-acroread-keymap (kbd "M->") (kbd "C-Sh-<next>")) ; last
page
-(define-key xwem-keytt-acroread-keymap (kbd "M-<") (kbd "C-Sh-<prior>")) ;
first page
-(define-key xwem-keytt-acroread-keymap (kbd "C-M-l") (kbd "C-<left>")) ; first
page
-(define-key xwem-keytt-acroread-keymap (kbd "C-x h") (kbd "C-a")) ; select all
-(define-key xwem-keytt-acroread-keymap (kbd "C-s") (kbd "C-f")) ; search
-(define-key xwem-keytt-acroread-keymap (kbd "+") (kbd "C-=")) ; zoom in
-(define-key xwem-keytt-acroread-keymap (kbd "-") (kbd "C--")) ; zoom out
+(define-key xwem-keytt-acroread-keymap (kbd "C-x C-f") (kbd "<self-insert>
C-o")) ; open file
+(define-key xwem-keytt-acroread-keymap (kbd "C-x C-c") (kbd "<self-insert>
C-q")) ; quit
+(define-key xwem-keytt-acroread-keymap (kbd "C-x C-s") (kbd "<self-insert>
C-S")) ; save copy
+(define-key xwem-keytt-acroread-keymap (kbd "C-x k") (kbd "<self-insert>
C-w")) ; close file
+(define-key xwem-keytt-acroread-keymap (kbd "C-n") (kbd "<self-insert>
<down>")) ; scroll down
+(define-key xwem-keytt-acroread-keymap (kbd "C-p") (kbd "<self-insert> <up>"))
; scroll up
+(define-key xwem-keytt-acroread-keymap (kbd "C-v") (kbd "<self-insert>
<right>")) ; next page
+(define-key xwem-keytt-acroread-keymap (kbd "M-v") (kbd "<self-insert>
<left>")) ; prev page
+(define-key xwem-keytt-acroread-keymap (kbd "M->") (kbd "<self-insert>
C-Sh-<next>")) ; last page
+(define-key xwem-keytt-acroread-keymap (kbd "M-<") (kbd "<self-insert>
C-Sh-<prior>")) ; first page
+(define-key xwem-keytt-acroread-keymap (kbd "C-M-l") (kbd "<self-insert>
C-<left>")) ; first page
+(define-key xwem-keytt-acroread-keymap (kbd "C-x h") (kbd "<self-insert>
C-a")) ; select all
+(define-key xwem-keytt-acroread-keymap (kbd "C-s") (kbd "<self-insert> C-f"))
; search
+(define-key xwem-keytt-acroread-keymap (kbd "+") (kbd "<self-insert> C-=")) ;
zoom in
+(define-key xwem-keytt-acroread-keymap (kbd "-") (kbd "<self-insert> C--")) ;
zoom out
;; XPDF
@@ -202,16 +213,16 @@
(xwem-keytt-add-keymap '((application "xpdf")) xwem-keytt-xpdf-keymap t)
(xwem-keytt-define-universal-argument-commands xwem-keytt-xpdf-keymap)
-(define-key xwem-keytt-xpdf-keymap (kbd "C-x C-f") (kbd "o")) ; open
-(define-key xwem-keytt-xpdf-keymap (kbd "C-x C-c") (kbd "q")) ; exit
-(define-key xwem-keytt-xpdf-keymap (kbd "C-s") (kbd "f")) ; find text
-(define-key xwem-keytt-xpdf-keymap (kbd "C-g") (kbd "<esc>")) ; stop searching
-(define-key xwem-keytt-xpdf-keymap (kbd "M-<") (kbd "<home>")) ; goto first
page
-(define-key xwem-keytt-xpdf-keymap (kbd "M->") (kbd "<end>")) ; goto last page
-(define-key xwem-keytt-xpdf-keymap (kbd "C-n") (kbd "<down>")) ; scroll down
-(define-key xwem-keytt-xpdf-keymap (kbd "C-p") (kbd "<up>")) ; scroll up
-(define-key xwem-keytt-xpdf-keymap (kbd "C-v") (kbd "n"))
-(define-key xwem-keytt-xpdf-keymap (kbd "M-v") (kbd "p"))
+(define-key xwem-keytt-xpdf-keymap (kbd "C-x C-f") (kbd "<self-insert> o")) ;
open
+(define-key xwem-keytt-xpdf-keymap (kbd "C-x C-c") (kbd "<self-insert> q")) ;
exit
+(define-key xwem-keytt-xpdf-keymap (kbd "C-s") (kbd "<self-insert> f")) ; find
text
+(define-key xwem-keytt-xpdf-keymap (kbd "C-g") (kbd "<self-insert> <esc>")) ;
stop searching
+(define-key xwem-keytt-xpdf-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ;
goto first page
+(define-key xwem-keytt-xpdf-keymap (kbd "M->") (kbd "<self-insert> <end>")) ;
goto last page
+(define-key xwem-keytt-xpdf-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ;
scroll down
+(define-key xwem-keytt-xpdf-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ;
scroll up
+(define-key xwem-keytt-xpdf-keymap (kbd "C-v") (kbd "<self-insert> n"))
+(define-key xwem-keytt-xpdf-keymap (kbd "M-v") (kbd "<self-insert> p"))
;; XDVI
(defvar xwem-keytt-xdvi-keymap (make-sparse-keymap 'xwem-keytt-xdvi-keymap)
@@ -219,16 +230,16 @@
(xwem-keytt-add-keymap '((application "xdvi")) xwem-keytt-xdvi-keymap t)
(xwem-keytt-define-universal-argument-commands xwem-keytt-xdvi-keymap)
-(define-key xwem-keytt-xdvi-keymap (kbd "C-x C-f") (kbd "C-F")) ; open
-(define-key xwem-keytt-xdvi-keymap (kbd "C-x C-c") (kbd "q")) ; exit
-(define-key xwem-keytt-xdvi-keymap (kbd "C-s") (kbd "f")); find text
-(define-key xwem-keytt-xdvi-keymap (kbd "M-<") (kbd "<home>")) ; goto first
page
-(define-key xwem-keytt-xdvi-keymap (kbd "M->") (kbd "<end>")) ; goto last page
-(define-key xwem-keytt-xdvi-keymap (kbd "C-n") (kbd "<down>")) ; scroll down
-(define-key xwem-keytt-xdvi-keymap (kbd "C-p") (kbd "<up>")) ; scroll up
-(define-key xwem-keytt-xdvi-keymap (kbd "C-v") (kbd "n"))
-(define-key xwem-keytt-xdvi-keymap (kbd "M-v") (kbd "p"))
-(define-key xwem-keytt-xdvi-keymap (kbd "C-l") (kbd "R")) ; reread dvi
+(define-key xwem-keytt-xdvi-keymap (kbd "C-x C-f") (kbd "<self-insert> C-F"))
; open
+(define-key xwem-keytt-xdvi-keymap (kbd "C-x C-c") (kbd "<self-insert> q")) ;
exit
+(define-key xwem-keytt-xdvi-keymap (kbd "C-s") (kbd "<self-insert> f"));
find text
+(define-key xwem-keytt-xdvi-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ;
goto first page
+(define-key xwem-keytt-xdvi-keymap (kbd "M->") (kbd "<self-insert> <end>")) ;
goto last page
+(define-key xwem-keytt-xdvi-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ;
scroll down
+(define-key xwem-keytt-xdvi-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ;
scroll up
+(define-key xwem-keytt-xdvi-keymap (kbd "C-v") (kbd "<self-insert> n"))
+(define-key xwem-keytt-xdvi-keymap (kbd "M-v") (kbd "<self-insert> p"))
+(define-key xwem-keytt-xdvi-keymap (kbd "C-l") (kbd "<self-insert> R")) ;
reread dvi
;; DJVIEW
@@ -239,18 +250,18 @@
(xwem-keytt-add-keymap '((application "djview")) xwem-keytt-djvu-keymap t)
(xwem-keytt-define-universal-argument-commands xwem-keytt-djvu-keymap)
-(define-key xwem-keytt-djvu-keymap (kbd "C-x C-f") (kbd "A-f O")) ; open
-(define-key xwem-keytt-djvu-keymap (kbd "C-x C-c") (kbd "A-f x")) ; exit
-(define-key xwem-keytt-djvu-keymap (kbd "C-x C-w") (kbd "A-f a")) ; save
current page
-(define-key xwem-keytt-djvu-keymap (kbd "C-x C-s") (kbd "A-f o")) ; save
-
-(define-key xwem-keytt-djvu-keymap (kbd "C-s") (kbd "f")); find text
-(define-key xwem-keytt-djvu-keymap (kbd "M-<") (kbd "<home>")) ; goto first
page
-(define-key xwem-keytt-djvu-keymap (kbd "M->") (kbd "<end>")) ; goto last page
-(define-key xwem-keytt-djvu-keymap (kbd "C-n") (kbd "<down>")) ; scroll down
-(define-key xwem-keytt-djvu-keymap (kbd "C-p") (kbd "<up>")) ; scroll up
-(define-key xwem-keytt-djvu-keymap (kbd "C-v") (kbd "<next>"))
-(define-key xwem-keytt-djvu-keymap (kbd "M-v") (kbd "<prior>"))
+(define-key xwem-keytt-djvu-keymap (kbd "C-x C-f") (kbd "<self-insert> A-f
O")) ; open
+(define-key xwem-keytt-djvu-keymap (kbd "C-x C-c") (kbd "<self-insert> A-f
x")) ; exit
+(define-key xwem-keytt-djvu-keymap (kbd "C-x C-w") (kbd "<self-insert> A-f
a")) ; save current page
+(define-key xwem-keytt-djvu-keymap (kbd "C-x C-s") (kbd "<self-insert> A-f
o")) ; save
+
+(define-key xwem-keytt-djvu-keymap (kbd "C-s") (kbd "<self-insert> f")); find
text
+(define-key xwem-keytt-djvu-keymap (kbd "M-<") (kbd "<self-insert> <home>")) ;
goto first page
+(define-key xwem-keytt-djvu-keymap (kbd "M->") (kbd "<self-insert> <end>")) ;
goto last page
+(define-key xwem-keytt-djvu-keymap (kbd "C-n") (kbd "<self-insert> <down>")) ;
scroll down
+(define-key xwem-keytt-djvu-keymap (kbd "C-p") (kbd "<self-insert> <up>")) ;
scroll up
+(define-key xwem-keytt-djvu-keymap (kbd "C-v") (kbd "<self-insert> <next>"))
+(define-key xwem-keytt-djvu-keymap (kbd "M-v") (kbd "<self-insert> <prior>"))
;; XCHM
@@ -261,9 +272,9 @@
(xwem-keytt-add-keymap '((application "xchm")) xwem-keytt-xchm-keymap t)
(xwem-keytt-define-universal-argument-commands xwem-keytt-xchm-keymap)
-(define-key xwem-keytt-xchm-keymap (kbd "C-x C-f") (kbd "C-o")) ; open
-(define-key xwem-keytt-xchm-keymap (kbd "C-x C-c") (kbd "C-x")) ; exit
-(define-key xwem-keytt-xchm-keymap (kbd "C-s") (kbd "C-s ")); find show tree
+(define-key xwem-keytt-xchm-keymap (kbd "C-x C-f") (kbd "<self-insert> C-o"))
; open
+(define-key xwem-keytt-xchm-keymap (kbd "C-x C-c") (kbd "<self-insert> C-x"))
; exit
+(define-key xwem-keytt-xchm-keymap (kbd "C-s") (kbd "<self-insert> C-s "));
find show tree
;;; On-load actions:
--- orig/extra/xwem-ratanot.el
+++ mod/extra/xwem-ratanot.el
@@ -79,7 +79,7 @@
(xwem-rnt-refit cl))
; (xwem-misc-move-outline srect frect 100)
- (XRaiseWindow (xwem-dpy) (xwem-cl-xwin cl))
+ (xwem-misc-raise-xwin (xwem-cl-xwin cl))
(XMapWindow (xwem-dpy) (xwem-cl-xwin cl))
;; Install local keymap
--- orig/extra/xwem-rooticon.el
+++ mod/extra/xwem-rooticon.el
@@ -65,6 +65,11 @@
:type 'boolean
:group 'xwem-rooticon)
+(defcustom xwem-rooticon-always-on-top-spec '((eval t))
+ "*MATCH-SPEC for always-on-top icons."
+ :type 'sexp
+ :group 'xwem-rooticon)
+
;;; Internal variables
(defstruct xwem-rooticon
@@ -107,6 +112,7 @@
(:X-DestroyNotify
(xwem-cl-rem-sys-prop (xwem-rooticon-cl ri) 'xwem-rooticon)
+ (xwem-misc-unset-always-on-top xwin)
(X-invalidate-cl-struct ri))))))
(defun xwem-rooticon-icons ()
@@ -257,7 +263,7 @@
(xwem-cl-p (xwem-rooticon-cl ri)))
(case (xwem-cl-state (xwem-rooticon-cl ri))
(iconified
- (XLowerWindow (xwem-dpy) (xwem-rooticon-xriwin ri))
+ (xwem-misc-lower-xwin (xwem-rooticon-xriwin ri))
(XMapWindow (xwem-dpy) (xwem-rooticon-xriwin ri))
(xwem-rooticon-draw ri))
@@ -271,12 +277,17 @@
(not ri))
(setq ri (xwem-rooticon-create cl)))
(when ri
+ ;; Set always on top rank (if any)
+ (when (xwem-cl-match-p cl xwem-rooticon-always-on-top-spec)
+ (xwem-misc-set-xwin-always-on-top (xwem-rooticon-xriwin ri)))
+
(xwem-rooticon-apply-state ri))))
(defun xwem-rooticon-cl-destroy (cl)
(let ((ri (xwem-cl-get-sys-prop cl 'xwem-rooticon)))
(when ri
(xwem-cl-rem-sys-prop cl 'xwem-rooticon)
+ (xwem-misc-unset-always-on-top (xwem-rooticon-xriwin ri))
(XDestroyWindow (xwem-dpy) (xwem-rooticon-xriwin ri))
(X-invalidate-cl-struct ri))))
--- orig/lisp/xwem-clients.el
+++ mod/lisp/xwem-clients.el
@@ -2206,7 +2206,7 @@
(define-xwem-method activate default (cl &optional type)
"Default method to activate client CL."
(cond ((eq type 'select)
- (xwem-deffered-funcall 'XRaiseWindow (xwem-dpy) (xwem-cl-xwin cl)))
+ (xwem-deffered-funcall 'xwem-misc-raise-xwin (xwem-cl-xwin cl)))
((eq type 'activate)
(xwem-default-apply-state cl))))
--- orig/lisp/xwem-events.el
+++ mod/lisp/xwem-events.el
@@ -227,16 +227,22 @@
;;;###xwem-autoload
(defun xwem-dispatch-command-event (eev &optional xev)
"Dispatch command Emacs event EEV."
- (let* ((ecl (xwem-event-client xev))
- (bind (or (xwem-lookup-key ecl (vector eev))
+ (let* ((vev (or (and (vectorp eev) eev) (vector eev)))
+ (ecl (xwem-event-client xev))
+ (bind (or (xwem-lookup-key ecl vev)
;; Then check for quit key
- (and (equal xwem-quit-key (events-to-keys (vector eev)))
+ (and (eventp vev)
+ (equal xwem-quit-key
+ (events-to-keys vev))
xwem-quit-command)
;; Then accept even default bindings
- (xwem-lookup-key ecl (vector eev) t))))
+ (xwem-lookup-key ecl vev t))))
;; If some button press/release does not have binding - ignore it
(unless (and (null bind) (button-event-p eev))
(xwem-event-as-command eev xev)
+ ;; In case EEV is set of events - adjust command keys
+ (when (vectorp eev)
+ (setq xwem-this-command-keys eev))
(xwem-kbd-dispatch-binding bind))))
;;;###xwem-autoload
--- orig/lisp/xwem-frame.el
+++ mod/lisp/xwem-frame.el
@@ -382,9 +382,9 @@
"Apply FRAME's raise/lower state to life."
(let ((rl (xwem-frame-get-prop frame 'raise-lower-state)))
(cond ((eq rl 'raise)
- (XRaiseWindow (xwem-dpy) (xwem-frame-xwin frame)))
+ (xwem-misc-raise-xwin (xwem-frame-xwin frame)))
((eq rl 'lower)
- (XLowerWindow (xwem-dpy) (xwem-frame-xwin frame))))))
+ (xwem-misc-lower-xwin (xwem-frame-xwin frame))))))
;;;###autoload(autoload 'xwem-frame-lower "xwem-frame" "" t)
(define-xwem-command xwem-frame-lower (frame)
@@ -816,14 +816,16 @@
(and (>= x (xwem-frame-x frame))
(<= x (+ (xwem-frame-x frame) (xwem-frame-width frame)))
(>= y (xwem-frame-y frame))
- (<= y (+ (xwem-frame-y frame) (xwem-frame-width frame)))))
+ (<= y (+ (xwem-frame-y frame) (xwem-frame-height frame)))))
-(defun xwem-frame-at (x y)
- "Return frame which contain point at X Y."
- (let ((fl (xwem-frames-list)))
- (while (and fl (not (xwem-frame-xy-in-p x y (car fl))))
- (setq fl (cdr fl)))
- (car fl)))
+(defun xwem-frame-at (x y &optional maped-p)
+ "Return frame which contain point at X Y.
+If MAPED-P is non-nil - search only mapped frame."
+ (loop for frame in (xwem-frames-list)
+ if (and (or (null maped-p)
+ (eq (xwem-frame-state frame) 'mapped))
+ (xwem-frame-xy-in-p x y frame))
+ return frame))
;;;###xwem-autoload(autoload 'xwem-frame-apply-xgeom-1 "xwem-frame" nil nil)
;;;###xwem-autoload(autoload 'xwem-frame-apply-xgeom "xwem-frame" nil nil)
--- orig/lisp/xwem-keyboard.el
+++ mod/lisp/xwem-keyboard.el
@@ -430,12 +430,27 @@
Prefix ARG specifies how many characters to insert."
(xwem-interactive "*_P")
- (if (= (length xwem-this-command-keys) 1)
- ;; Self insert command allowed only for normal clients
+ (let ((self-insert-p nil))
+ (cond ((and (> (length xwem-this-command-keys) 1)
+ (eq (aref xwem-this-command-keys 0) 'self-insert))
+ ;; Adjust xwem-this-command-keys by removing leading 'self-insert
+ (setq xwem-this-command-keys
+ (vconcat (cdr (append xwem-this-command-keys nil))))
+ (setq self-insert-p t))
+
+ ((= (length xwem-this-command-keys) 1)
+ (setq self-insert-p t)))
+
+ (if (not self-insert-p)
+ (error 'xwem-error (format "%s is undefined"
+ (key-description xwem-this-command-keys)))
+
+ ;; Self insert command allowed only for normal clients to avoid
+ ;; infinite loops.
(unless (xwem-dummy-client-p (xwem-cl-selected))
(xwem-kbd-add-pending-keys
- (make-vector (prefix-numeric-value arg) xwem-last-event)))
- (error 'xwem-error (format "%s is undefined" (key-description
xwem-this-command-keys)))))
+ (apply 'vconcat (make-list (prefix-numeric-value arg)
xwem-this-command-keys))
+ (xwem-cl-selected))))))
;;}}}
--- orig/lisp/xwem-keymacro.el
+++ mod/lisp/xwem-keymacro.el
@@ -199,6 +199,11 @@
;;;###xwem-autoload
(defun xwem-keymacro-execute-keys (keys)
"Execute keyboard macro KEYS."
+ ;; XXX Adjust KEYS in case KEYS is 'self-insert
+ (when (and (> (length keys) 1)
+ (eq (aref keys 0) 'self-insert))
+ (setq keys (vector keys)))
+
(let ((xwem-keymacro-keys keys)
(xwem-keymacro-keys-index 0))
(while (< xwem-keymacro-keys-index (length xwem-keymacro-keys))
@@ -293,13 +298,9 @@
;; 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)))
+ ;; Execute KEYS TIMES times
+ (dotimes (i times)
+ (xwem-keymacro-execute-keys keys)))
;; 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
@@ -185,6 +185,20 @@
:initialize 'custom-initialize-default
:group 'xwem-minibuffer)
+(defcustom xwem-minibiffer-always-on-top-rank 20
+ "*Always on top rank or nil."
+ :type '(choice (const :tag "No rank" nil)
+ (number :tag "Rank"))
+ :set (lambda (sym value)
+ (set sym value)
+ (let ((xwin (xwem-minib-xwin xwem-minibiffer)))
+ (when xwin
+ (if value
+ (xwem-misc-set-xwin-always-on-top xwin value)
+ (xwem-misc-unset-always-on-top xwin)))))
+ :initialize 'custom-initialize-default
+ :group 'xwem-minibuffer)
+
(defcustom xwem-minibuffer-raise-when-active t
"*Non-nil mean xwem minibuffer is raised when activated."
:type 'boolean
@@ -386,6 +400,11 @@
(xwem-refit cl)
(XMapWindow (xwem-dpy) (xwem-minib-xwin minib))
+ ;; Set always on top rank (if any)
+ (when xwem-minibiffer-always-on-top-rank
+ (xwem-misc-set-xwin-always-on-top
+ (xwem-minib-xwin minib) xwem-minibiffer-always-on-top-rank))
+
;; Set default minibuffer, if not already set
(unless (xwem-cl-p (xwem-minib-cl xwem-minibuffer))
(setq xwem-minibuffer minib)
@@ -498,7 +517,7 @@
(when (and xwem-minibuffer-raise-when-active
(eq state 'active))
- (XRaiseWindow (xwem-dpy) (xwem-minib-xwin minib))))
+ (xwem-misc-raise-xwin (xwem-minib-xwin minib))))
(when (eq state 'active)
(xwem-minibuffer-enable-autohide-timer (xwem-minib-cl minib)))))
@@ -534,11 +553,11 @@
;; Events handler
(define-xwem-deffered xwem-minib-focusin-autoraise (minib)
"Mainly for use in `xwem-minibuffer-focusout-hook'."
- (XRaiseWindow (xwem-dpy) (xwem-minib-xwin minib)))
+ (xwem-misc-raise-xwin (xwem-minib-xwin minib)))
(define-xwem-deffered xwem-minib-focusout-autolower (minib)
"Mainly for use in `xwem-minibuffer-focusout-hook'."
- (XLowerWindow (xwem-dpy) (xwem-minib-xwin minib)))
+ (xwem-misc-lower-xwin (xwem-minib-xwin minib)))
;;;###autoload(autoload 'xwem-minibuffer-activate "xwem-minibuffer" "" t)
(define-xwem-command xwem-minibuffer-activate ()
@@ -608,7 +627,7 @@
(defun xwem-minib-rsz-restore ()
"Restore xwem minibuffer size."
(xwem-minib-rsz-resize xwem-minib-rsz-saved-height)
- (XLowerWindow (xwem-dpy) (xwem-minib-xwin xwem-minibuffer)))
+ (xwem-misc-lower-xwin (xwem-minib-xwin xwem-minibuffer)))
(defun xwem-minib-rsz-check ()
"Called in `pre-command-hook'.
@@ -629,7 +648,7 @@
(set-frame-size frame (frame-width frame) lines)
(setq n (frame-pixel-height frame))
- (XRaiseWindow (xwem-dpy) (xwem-minib-xwin xwem-minibuffer))
+ (xwem-misc-raise-xwin (xwem-minib-xwin xwem-minibuffer))
;; Adjust xwem minibuffer cl height
(xwem-client-resize (xwem-minib-cl xwem-minibuffer) nil
--- orig/lisp/xwem-misc.el
+++ mod/lisp/xwem-misc.el
@@ -1593,6 +1593,78 @@
(let ((print-level 3)) ; XXX Restrict huge output
(apply 'X-Dpy-log (xwem-dpy) routine fmt fmt-args)))
+
+;;; Raise/lower stuff
+(defvar xwem-misc-always-on-top-stack nil
+ "List of always-on-top windows.")
+
+;;;###xwem-autoload
+(defun xwem-misc-set-xwin-always-on-top (xwin &optional rank)
+ "Mark xwin as always on top window.
+If number RANK is given, it denotes rank of always on top window.
+Higher RANK mean XWIN is above windows with lower RANK.
+By default RANK is 10."
+ (X-Win-put-prop xwin 'always-on-top-rank (or rank 10))
+
+ ;; Sort `xwem-misc-always-on-top-stack' by rank after adding XWIN,
+ ;; higher rank are at the end.
+ (pushnew xwin xwem-misc-always-on-top-stack)
+ (setq xwem-misc-always-on-top-stack
+ (sort xwem-misc-always-on-top-stack
+ #'(lambda (xwin1 xwin2)
+ (< (X-Win-get-prop xwin1 'always-on-top-rank)
+ (X-Win-get-prop xwin1 'always-on-top-rank)))))
+
+ ;; Finnaly apply RANK to life
+ (xwem-misc-raise-xwin xwin))
+
+;;;###xwem-autoload
+(defun xwem-misc-unset-always-on-top (xwin)
+ "Unmark XWIN as always on top window."
+ (X-Win-rem-prop xwin 'always-on-top-rank)
+ (setq xwem-misc-always-on-top-stack
+ (delq xwin xwem-misc-always-on-top-stack)))
+
+(defun xwem-misc-find-below-sibling (operation rank)
+ "Select appropriate below sibling from `xwem-misc-always-on-top-stack'."
+ (let ((sibs xwem-misc-always-on-top-stack)
+ (rsib nil))
+ (while sibs
+ (unless (X-Win-p (car sibs))
+ ;; Remove broken sibling
+ (setq xwem-misc-always-on-top-stack
+ (delq (car sibs) xwem-misc-always-on-top-stack)
+ sibs (cdr sibs)))
+ (when (funcall operation (X-Win-get-prop (car sibs) 'always-on-top-rank)
rank)
+ (setq rsib (car sibs)
+ sibs nil))
+ (setq sibs (cdr sibs)))
+ rsib))
+
+;;;###xwem-autoload
+(defun xwem-misc-raise-xwin (xwin)
+ "Raise XWIN reguarding always on top windows."
+ (let* ((rank (or (X-Win-get-prop xwin 'always-on-top-rank) 0))
+ (bsib (and rank (xwem-misc-find-below-sibling '> rank))))
+ (cond ((not bsib)
+ (XRaiseWindow (xwem-dpy) xwin))
+ ((not (X-Win-equal xwin bsib))
+ (XConfigureWindow (xwem-dpy) xwin
+ (make-X-Conf :stackmode X-Below
+ :sibling bsib))))))
+
+;;;###xwem-autoload
+(defun xwem-misc-lower-xwin (xwin)
+ "Lower XWIN according to its always on top rank."
+ (let* ((rank (X-Win-get-prop xwin 'always-on-top-rank))
+ (bsib (and rank (xwem-misc-find-below-sibling '>= rank))))
+ (cond ((not bsib)
+ (XLowerWindow (xwem-dpy) xwin))
+ ((not (X-Win-equal xwin bsib))
+ (XConfigureWindow (xwem-dpy) xwin
+ (make-X-Conf :stackmode X-Below
+ :sibling bsib))))))
+
(provide 'xwem-misc)
--- orig/lisp/xwem-netwm.el
+++ mod/lisp/xwem-netwm.el
@@ -502,10 +502,10 @@
(when (xwem-cl-p cl)
(cond ((eq (xwem-cl-state cl) 'active)
(XMapWindow (xwem-dpy) (xwem-cl-xwin cl))
- (XRaiseWindow (xwem-dpy) (xwem-cl-xwin cl)))
+ (xwem-misc-raise-xwin (xwem-cl-xwin cl)))
((memq (xwem-cl-state cl) '(inactive iconified))
- (XLowerWindow (xwem-dpy) (xwem-cl-xwin cl))
+ (xwem-misc-lower-xwin (xwem-cl-xwin cl))
(XUnmapWindow (xwem-dpy) (xwem-cl-xwin cl))))))
(defun xwem-activate-fullscreen (cl &optional type)
--- orig/lisp/xwem-rooter.el
+++ mod/lisp/xwem-rooter.el
@@ -42,9 +42,9 @@
:prefix "xwem-rooter-"
:group 'xwem-modes)
-(defcustom xwem-rooter-auto-raised-regexp "^$"
- "Regexp for autoraised rooters."
- :type 'string
+(defcustom xwem-rooter-always-on-top-spec nil
+ "Matchspec for always on top rooters."
+ :type 'sexp
:group 'xwem-rooter)
;;; Internal variables
@@ -67,15 +67,13 @@
(define-xwem-command xwem-rooter-raise ()
"Raise rooter window."
(xwem-interactive "_")
-
- (XRaiseWindow (xwem-dpy) (xwem-cl-xwin xwem-event-client)))
+ (xwem-misc-raise-xwin (xwem-cl-xwin xwem-event-client)))
;;;###autoload(autoload 'xwem-rooter-lower "xwem-rooter" nil t)
(define-xwem-command xwem-rooter-lower ()
"Lower rooter window."
(xwem-interactive "_")
-
- (XLowerWindow (xwem-dpy) (xwem-cl-xwin xwem-event-client)))
+ (xwem-misc-lower-xwin (xwem-cl-xwin xwem-event-client)))
;;;; Manage methods
@@ -93,7 +91,11 @@
(XReparentWindow xdpy xwin (xwem-rootwin)
(X-Geom-x xgeom) (X-Geom-y xgeom))
- (XLowerWindow xdpy xwin)
+
+ (if (xwem-cl-match-p cl xwem-rooter-always-on-top-spec)
+ (xwem-misc-set-xwin-always-on-top xwin)
+ (xwem-misc-lower-xwin xwin))
+
(XMapWindow xdpy xwin)
;; Install client local keymap
@@ -106,15 +108,22 @@
"Activate method for rooter clients."
(when (eq type 'select)
(error 'xwem-error "Trying to select rooted client!!!"))
-
- (XRaiseWindow (xwem-dpy) (xwem-cl-xwin cl)))
+ (xwem-misc-raise-xwin (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-misc-lower-xwin (xwem-cl-xwin cl)))
- (XLowerWindow (xwem-dpy) (xwem-cl-xwin cl)))
+;; Additional methods
+(define-xwem-method on-type-change rooter (cl &optional new)
+ "Called when CL is about to change major mode."
+ (xwem-misc-unset-always-on-top (xwem-cl-xwin cl)))
+
+(define-xwem-method on-kill rooter (cl)
+ "Called when CL is killed."
+ (xwem-misc-unset-always-on-top (xwem-cl-xwin cl)))
(provide 'xwem-rooter)
--- orig/lisp/xwem-special.el
+++ mod/lisp/xwem-special.el
@@ -290,7 +290,7 @@
(define-xwem-deffered xwem-special-apply-state (cl)
"Apply CL's state to life."
(cond ((eq (xwem-cl-state cl) 'active)
- (XRaiseWindow (xwem-dpy) (xwem-cl-xwin cl))
+ (xwem-misc-raise-xwin (xwem-cl-xwin cl))
(XMapWindow (xwem-dpy) (xwem-cl-xwin cl)))
((eq (xwem-cl-state cl) '(inactive iconify))
--- orig/lisp/xwem-transient.el
+++ mod/lisp/xwem-transient.el
@@ -116,11 +116,11 @@
(define-xwem-deffered xwem-transient-apply-state (cl)
"Apply CL's state to life."
(cond ((eq (xwem-cl-state cl) 'active)
- (XRaiseWindow (xwem-dpy) (xwem-cl-xwin cl))
+ (xwem-misc-raise-xwin (xwem-cl-xwin cl))
(XMapWindow (xwem-dpy) (xwem-cl-xwin cl)))
((eq (xwem-cl-state cl) 'inactive)
- (XLowerWindow (xwem-dpy) (xwem-cl-xwin cl)))
+ (xwem-misc-lower-xwin (xwem-cl-xwin cl)))
((eq (xwem-cl-state cl) 'iconified)
(XUnmapWindow (xwem-dpy) (xwem-cl-xwin cl)))))
@@ -130,7 +130,7 @@
(let ((trc (xwem-xwin-cl (xwem-cl-transient-for cl))))
(when (xwem-cl-p trc)
(xwem-activate trc)))
- (xwem-deffered-funcall 'XRaiseWindow (xwem-dpy) (xwem-cl-xwin cl)))
+ (xwem-deffered-funcall 'xwem-misc-raise-xwin (xwem-cl-xwin cl)))
((eq type 'activate)
(xwem-transient-apply-state cl)
--- orig/utils/xwem-holer.el
+++ mod/utils/xwem-holer.el
@@ -415,8 +415,8 @@
"Using ButtonPress XEV find out xwem frame."
(let* ((srx (X-Event-xbutton-root-x xev))
(sry (X-Event-xbutton-root-y xev))
- (frame (or (xwem-xwin-frame (X-Event-xbutton-event xev))
- (xwem-frame-at srx sry))))
+ (frame (or (xwem-xwin-frame (X-Event-xbutton-child xev))
+ (xwem-frame-at srx sry t))))
frame))
(defun xwem-holer-find-holer (xev)
--- orig/utils/xwem-osd.el
+++ mod/utils/xwem-osd.el
@@ -426,7 +426,7 @@
"Show OSD's window."
(xwem-osd-apply-xmask-1 osd)
(XMapWindow (xwem-osd-xdpy osd) (xwem-osd-xwin osd))
- (XRaiseWindow (xwem-osd-xdpy osd) (xwem-osd-xwin osd))
+ (xwem-misc-raise-xwin (xwem-osd-xdpy osd) (xwem-osd-xwin osd))
(setf (xwem-osd-state osd) 'shown))
--- orig/utils/xwem-worklog.el
+++ mod/utils/xwem-worklog.el
@@ -853,7 +853,7 @@
XM-StructureNotify
XM-ButtonPress XM-ButtonRelease)))))
(XMapWindow (xwem-dpy) xwin)
- (XRaiseWindow (xwem-dpy) xwin)
+ (xwem-misc-raise-xwin xwin)
xwin))
(defun xwem-worklog-pause-create-xpixmap (xwin)
@@ -1526,7 +1526,7 @@
:id (X-Dpy-get-id (xwem-dpy)))
(xwem-worklog-dockapp-win wd)
(XDefaultDepth (xwem-dpy))
- (+ 1 w) (+ 1 (* 2 sw))))
+ (+ 1 w) (+ 1 h (* 2 sw))))
(X-Win-put-prop (xwem-worklog-dockapp-win wd) 'xwem-worklog-dockapp wd)
@@ -1552,9 +1552,10 @@
;; Start updater
(setf (xwem-worklog-dockapp-update-itimer wd)
(start-itimer "xwem-worklog-dockapp-updater"
- `(lambda () (xwem-worklog-dockapp-update ,wd))
+ 'xwem-worklog-dockapp-update
(xwem-worklog-meaning-update-time)
- (xwem-worklog-meaning-update-time)))
+ (xwem-worklog-meaning-update-time)
+ t wd))
;; Set default worklog dockapp
(unless xwem-worklog-default-dockapp
@@ -1562,11 +1563,11 @@
;; Add hooks
(add-hook 'xwem-worklog-task-start-hook
- 'xwem-worklog-dockapp-apply-pixmap t)
+ 'xwem-worklog-dockapp-update-task-brick t)
(add-hook 'xwem-worklog-login-hook
- 'xwem-worklog-dockapp-apply-pixmap t)
+ 'xwem-worklog-dockapp-update t)
(add-hook 'xwem-worklog-logout-hook
- 'xwem-worklog-dockapp-apply-pixmap t)
+ 'xwem-worklog-dockapp-update t)
wd))
(defun xwem-worklog-dockapp-stop (dockapp &optional need-destroy)
@@ -1576,7 +1577,7 @@
(setq xwem-worklog-default-dockapp nil))
;; XXX
- (remove-hook 'xwem-worklog-task-start-hook 'xwem-worklog-dockapp-update)
+ (remove-hook 'xwem-worklog-task-start-hook
'xwem-worklog-dockapp-update-task-brick)
(remove-hook 'xwem-worklog-login-hook 'xwem-worklog-dockapp-update)
(remove-hook 'xwem-worklog-logout-hook 'xwem-worklog-dockapp-update)
|