Location: lg@xxxxxxxxxxxxxx http://arch.xwem.org/2005/
Revision: xwem--main--2.1--patch-42
Archive: lg@xxxxxxxxxxxxxx
Creator: Zajcev Evgeny <lg@xxxxxxxx>
Date: Sat Apr 2 03:19:52 MSD 2005
Standard-date: 2005-04-01 23:19:52 GMT
Modified-files: dockapp/xwem-weather.el
extra/xwem-frametrans.el extra/xwem-rooticon.el
lisp/xwem-clients.el lisp/xwem-frame.el
lisp/xwem-keydefs.el lisp/xwem-main.el
lisp/xwem-minibuffer.el lisp/xwem-misc.el
lisp/xwem-netwm.el lisp/xwem-rooter.el
lisp/xwem-transient.el utils/xwem-appcollect.el
utils/xwem-osd.el xwem-agent/xwem-agent.c
New-patches: dev@xxxxxxxxxxxxxxxx/xwem--dev--2.1--patch-33
dev@xxxxxxxxxxxxxxxx/xwem--dev--2.1--patch-34
lg@xxxxxxxxxxxxxx/xwem--main--2.1--patch-42
Summary: Another bunch of fixes before release
Keywords:
* dockapp/xwem-weather.el (xwem-weather-menu): Menu title removed.
* dockapp/xwem-weather.el (xwem-weather-popup-menu): Make menu title
dinamically, to show station id.
* extra/xwem-frametrans.el (xwem-frame-transparency): [new] Command to
toggle frame transparency for selected frame.
* extra/xwem-frametrans.el (advice): [addon] advice also
`xwem-win-set-cl' to update frame transparency mask.
* extra/xwem-rooticon.el (xwem-rooticon-always-on-top-spec): [fix] Rank
is 15 by default, to not obscure xwem minibuffer, which has rank 20.
* extra/xwem-rooticon.el (xwem-rooticon-genmenu): [addon] Dynamic menu
title, to show icon name.
* lisp/xwem-clients.el (xwem-select-client): [fix] If client can't be
selected - just activate it.
* lisp/xwem-clients.el (xwem-client-iconify): [addon] Now accepts prefix
argument - to iconify all clients of same major mode as selected
client.
* lisp/xwem-clients.el (xwem-client-iconify-every): [new] Command to
iconify all clients.
* lisp/xwem-clients.el (xwem-client-exchange-selected-and-mark): [new]
Command to exchange marked client and selected client. Binded by
default to `H-x H-x'
* lisp/xwem-frame.el (xwem-frame-destroy): [addon] Now accepts prefix
argument - to close all clients managed in this frame.
* lisp/xwem-keydefs.el (xwem-global-map): [addon] `H-x 7 Z' binded to
`xwem-client-iconify-every'.
* lisp/xwem-keydefs.el (xwem-global-map): [addon] `H-x H-x' binded to
`xwem-client-exchange-selected-and-mark'.
* lisp/xwem-main.el (xwem-after-window-setup): [fix] Initialise xwem-misc
before doing any things. Just in case someone want to use misc masks
or cursors.
* lisp/xwem-minibuffer.el (xwem-modeline-format): [change] Format changed
to make it more human friendly. Info about mark and register added.
* lisp/xwem-misc.el (advice): Advice `XCreateWindow' to mark windows
created by xwem on xwem display.
* lisp/xwem-misc.el (ranking): [fixes] Various fixes to rearrange
`xwem-misc-always-on-top-stack' properly.
* lisp/xwem-misc.el: On load hooks removed, since xwem-main initialises
xwem-misc directly.
* lisp/xwem-netwm.el (xwem-manage-fullscreen): [addon] Support for
xinerama.
* lisp/xwem-rooter.el (activate method): [fix] Do XMapWindow explicitely.
* lisp/xwem-transient.el (ranking): [addon] Support for inheriting
always-on-top rank from client it transient for.
* utils/xwem-osd.el (xwem-osd-create-mask): [bug fix] Do not recreate
masking gc if it is already created.
* xwem-agent/xwem-agent.c (start_emacs): [fix] Make sure there is no
other (S)XEmacs instance started by xwem-agent, before starting new
(S)XEmacs.
* added files
{arch}/xwem/xwem--dev/xwem--dev--2.1/dev@xxxxxxxxxxxxxxxx/patch-log/patch-33
{arch}/xwem/xwem--dev/xwem--dev--2.1/dev@xxxxxxxxxxxxxxxx/patch-log/patch-34
{arch}/xwem/xwem--main/xwem--main--2.1/lg@xxxxxxxxxxxxxx/patch-log/patch-42
* modified files
--- orig/dockapp/xwem-weather.el
+++ mod/dockapp/xwem-weather.el
@@ -92,12 +92,12 @@
:group 'xwem-weather)
(defvar xwem-weather-menu
- '("Weather"
- ["Show details" xwem-weather-show-details]
+ '(["Show details" xwem-weather-show-details]
["Update" xwem-weather-update]
"---"
["Destroy" xwem-weather-remove])
- "Menu to popup on `xwem-weather-popup-menu' command.")
+ "Menu to popup on `xwem-weather-popup-menu' command.
+NOTE: title for this menu is formated dynamically.")
;;;###autoload(autoload 'xwem-weather-prefix "xwem-weather" nil nil 'keymap)
(xwem-define-prefix-command 'xwem-weather-prefix t)
@@ -301,7 +301,9 @@
(unless (button-event-p ev)
(error 'xwem-error
"`xwem-weather-popup-menu' must be bound to mouse event"))
- (xwem-popup-menu xwem-weather-menu))
+ (xwem-popup-menu
+ (cons (format "Weather (%s)" (upcase xwem-weather-station-id))
+ xwem-weather-menu)))
(defvar xwem-weather-osd-keymap
(let ((map (make-sparse-keymap 'xwem-weather-osd-keymap)))
--- orig/extra/xwem-frametrans.el
+++ mod/extra/xwem-frametrans.el
@@ -173,12 +173,31 @@
"Return FRAME's transparency."
(xwem-frame-get-prop frame prop))
+;;;; Commands
+;;;###autoload(autoload 'xwem-frame-transparency "xwem-frametrans" nil t)
+(define-xwem-command xwem-frame-transparency (frame &optional toggle)
+ "Toggle transparency for FRAME.
+If TOGGLE is positive number - enable.
+If TOGGLE is negative number - disable."
+ (xwem-interactive (list (xwem-frame-selected)
+ xwem-prefix-arg))
+
+ (xwem-frame-set-property
+ frame 'transparency
+ (if (null toggle)
+ (not (xwem-frame-property frame 'transparency))
+ (> (prefix-numeric-value toggle) 0))))
+
(provide 'xwem-frametrans)
;; On-load actions:
(add-hook 'xwem-frame-resize-hook 'xwem-ft-mask-resize)
+(defadvice xwem-win-set-cl (after trans-frame activate)
+ "Fill frame when window changes its client."
+ (xwem-ft-fill-mask (xwem-win-frame (ad-get-arg 0))))
+
(defadvice xwem-win-redraw-win-1 (after trans-frame activate)
"Fill frame transparency mask."
(xwem-ft-fill-mask (xwem-win-frame (ad-get-arg 0))))
--- orig/extra/xwem-rooticon.el
+++ mod/extra/xwem-rooticon.el
@@ -65,7 +65,7 @@
:type 'boolean
:group 'xwem-rooticon)
-(defcustom xwem-rooticon-always-on-top-spec '((((eval t)) . 30))
+(defcustom xwem-rooticon-always-on-top-spec '((((eval t)) . 15))
"*List of cons cells in format:
\(MATCH-SPEC . RANK) for always-on-top icons.
If MATCH-SPEC matches rooticon's client - than RANK is set as always
@@ -269,7 +269,7 @@
(xwem-misc-lower-xwin (xwem-rooticon-xriwin ri))
(XMapWindow (xwem-dpy) (xwem-rooticon-xriwin ri))
(xwem-rooticon-draw ri))
-
+
(t (XUnmapWindow (xwem-dpy) (xwem-rooticon-xriwin ri))))))
(defun xwem-rooticon-cl-state-change-hook (cl old-state new-state)
@@ -364,7 +364,11 @@
(xwem-select-client ricl)))))
(defun xwem-rooticon-genmenu (ri)
- (list "XWEM RootIcon"
+ "Generate menu for rooticon RI."
+ ;; XXX menu title
+ (list (if (> (length (xwem-cl-wm-icon-name (xwem-rooticon-cl ri))) 18)
+ (concat (substring (xwem-cl-wm-icon-name (xwem-rooticon-cl ri)) 0
16) "..")
+ (xwem-cl-wm-icon-name (xwem-rooticon-cl ri)))
(vector "Select" `(xwem-select-client ,(xwem-rooticon-cl ri)))
(vector "Info" `(xwem-client-info ,(xwem-rooticon-cl ri)))
(vector "Mark" `(if (xwem-cl-marked-p ,(xwem-rooticon-cl ri))
--- orig/lisp/xwem-clients.el
+++ mod/lisp/xwem-clients.el
@@ -564,7 +564,9 @@
(setf (xwem-cl-recency cl) (current-time))
;; Skip clients that can't be selected
- (when (xwem-cl-can-be-selected-p cl)
+ (if (not (xwem-cl-can-be-selected-p cl))
+ (xwem-activate cl)
+
(cond ((and (not (xwem-cl-selected-p cl))
(xwem-cl-active-p (xwem-cl-selected))
(xwem-client-property (xwem-cl-selected) 'skip-deselect)
@@ -885,14 +887,30 @@
(setf (X-Geom-height clgmt) (- he (* 2 hthi) he-rmd))))
;;;###autoload(autoload 'xwem-client-iconify "xwem-clients" "" t)
-(define-xwem-command xwem-client-iconify (cl)
- "Iconifies selected client."
- (xwem-interactive (list (xwem-cl-selected)))
+(define-xwem-command xwem-client-iconify (cl &optional arg)
+ "Iconify selected client CL.
+If prefix ARG is given - iconify only clients of same major mode as
+selected client."
+ (xwem-interactive (list (xwem-cl-selected) xwem-prefix-arg))
(unless (xwem-cl-alive-p cl)
(error 'xwem-error "Invalid client"))
- (xwem-iconify cl))
+ (if arg
+ (mapc 'xwem-iconify
+ (xwem-clients-list
+ #'(lambda (ocl)
+ (eq (xwem-cl-manage-type ocl)
+ (xwem-cl-manage-type cl)))))
+ (xwem-iconify cl)))
+
+;;;###xwem-autoload(autoload 'xwem-client-iconify-every "xwem-clients" "" t)
+(define-xwem-command xwem-client-iconify-every (arg)
+ "Iconify every client.
+If prefix ARG is specified - iconify also dummy clients."
+ (xwem-interactive "P")
+
+ (mapc 'xwem-client-iconify (xwem-clients-list nil arg)))
;;;###autoload(autoload 'xwem-switch-client "xwem-clients" "" t)
(define-xwem-command xwem-switch-client (arg)
@@ -1182,7 +1200,9 @@
(setf (xwem-cl-transient-for cl)
(xwem-hints-wm-transient-for (xwem-cl-hints cl)))
- (XChangeSaveSet (xwem-dpy) (xwem-cl-xwin cl) X-SetModeInsert)
+ ;; TODO: skip clients created by xwem (for example embedded frame)
+ (unless (X-Win-get-prop (xwem-cl-xwin cl) 'xwin-created-by-xwem)
+ (XChangeSaveSet (xwem-dpy) (xwem-cl-xwin cl) X-SetModeInsert))
;; Install keyboard grabs, (ARGUSED)
(xwem-kbd-install-grab xwem-global-map xwin)
@@ -1193,8 +1213,7 @@
(not (xwem-client-local-variable-p (cdr mm-entry)))
(symbol-value (car mm-entry)))
(xwem-kbd-install-grab (symbol-value (cdr mm-entry)) xwin)))
- xwem-minor-mode-map-alist)
- ))
+ xwem-minor-mode-map-alist)))
;;;###xwem-autoload
(defun xwem-make-client (xwin &optional props)
@@ -1326,6 +1345,9 @@
"Tottally destroy CL."
(setf (xwem-cl-state cl) 'destroyed)
+ ;; If client's window was having always on top rank - unset it
+ (xwem-misc-unset-always-on-top (xwem-cl-xwin cl))
+
(xwem-method-on-kill cl)
(xwem-unwind-protect
(run-hook-with-args 'xwem-cl-destroy-hook cl)
@@ -1790,6 +1812,20 @@
((> (prefix-numeric-value arg) 0)
(xwem-cl-pop-to-client cl))))
+;;;###autoload(autoload 'xwem-client-exchange-selected-and-mark "xwem-clients"
"" t)
+(define-xwem-command xwem-client-exchange-selected-and-mark (cl)
+ "Exchange marked client with selected client CL.
+I.e. marked client will be selected and unmarked, and selected client
+will be deselected and marked."
+ (xwem-interactive (list (xwem-cl-selected)))
+
+ (let ((mcl (car xwem-cl-mark-ring)))
+ (unless (xwem-cl-p mcl)
+ (error 'xwem-error "No marked client"))
+ (xwem-client-unset-mark mcl)
+ (xwem-client-set-mark cl)
+ (xwem-select-client mcl)))
+
;;;###xwem-autoload
(defun xwem-fini-clients ()
"Fini all clients."
@@ -2061,10 +2097,17 @@
(let ((state (xwem-cl-state cl))
(selp (xwem-cl-selected-p cl)))
- ;; Move client to root window temporary
+ ;; If client's window was having always on top rank - unset it
+ (xwem-misc-unset-always-on-top (xwem-cl-xwin cl))
+
+ ;; Reparent client to root window. The reparenting leaves unchanged the
+ ;; absolute coordinates (with respect to the root window) of the
+ ;; upper-left outer corner.
+ (let ((tpnt (car (XTranslateCoordinates (xwem-dpy) (xwem-cl-xwin cl)
+ (xwem-rootwin) 0 0))))
+ (XReparentWindow (xwem-dpy) (xwem-cl-xwin cl)
+ (xwem-rootwin) (X-Point-x tpnt) (X-Point-y tpnt)))
(XUnmapWindow (xwem-dpy) (xwem-cl-xwin cl))
- (XReparentWindow (xwem-dpy) (xwem-cl-xwin cl)
- (xwem-rootwin) 0 0)
(xwem-method-on-type-change cl manage-spec)
@@ -2262,7 +2305,11 @@
(defun xwem-dummy-client-init ()
"Create dummy client"
(unless xwem-dummy-client
- (setq xwem-dummy-client
+ ;; Set `xwem-dummy-client' to some garbage before creating, to
+ ;; avoid infinite loop if `xwem-make-client' will use
+ ;; `xwem-dummy-client' somehow --lg
+ (setq xwem-dummy-client 'invalid-dummy-client
+ xwem-dummy-client
(xwem-make-client
(XCreateWindow (xwem-dpy) nil 0 0 1 1 0 nil nil nil
(make-X-Attr :override-redirect t))
--- orig/lisp/xwem-frame.el
+++ mod/lisp/xwem-frame.el
@@ -1285,9 +1285,16 @@
(xwem-message 'warning "Strange arg value: %S" arg)))
;;;###autoload(autoload 'xwem-frame-destroy "xwem-frame" "" t)
-(define-xwem-command xwem-frame-destroy (frame)
- "Destroy FRAME. If FRAME is not given selected frame assumed."
- (xwem-interactive (list (xwem-frame-selected)))
+(define-xwem-command xwem-frame-destroy (frame &optional arg)
+ "Destroy FRAME. If FRAME is not given selected frame assumed.
+If prefix ARG is given - close all clients managed in FRAME."
+ (xwem-interactive (list (xwem-frame-selected) xwem-prefix-arg))
+
+ ;; In case of prefix ARG - close all clients
+ (when arg
+ (mapc 'xwem-client-kill
+ (xwem-clients-list #'(lambda (cl)
+ (eq (xwem-cl-frame cl) frame)))))
(when (xwem-frame-p frame)
(xwem-frame-total-remove frame)))
--- orig/lisp/xwem-keydefs.el
+++ mod/lisp/xwem-keydefs.el
@@ -280,6 +280,7 @@
;; Clients commands
(define-key xwem-global-map (xwem-kbd "H-x 7 z") 'xwem-client-iconify)
+(define-key xwem-global-map (xwem-kbd "H-x 7 Z") 'xwem-client-iconify-every)
(define-key xwem-global-map (xwem-kbd "H-x 7 0") 'xwem-client-kill)
(define-key xwem-global-map (xwem-kbd "H-x 7 1") 'xwem-client-iconify-others)
(define-key xwem-global-map (xwem-kbd "H-x 7 2") 'xwem-client-run-copy)
@@ -296,6 +297,7 @@
(define-key xwem-global-map (xwem-kbd "H-@") 'xwem-client-set-mark)
(define-key xwem-global-map (xwem-kbd "H-SPC") 'xwem-client-set-mark)
+(define-key xwem-global-map (xwem-kbd "H-x H-x")
'xwem-client-exchange-selected-and-mark)
(define-key xwem-global-map (xwem-kbd "H-x k") 'xwem-client-query-kill)
(define-key xwem-global-map (xwem-kbd "H-x z") 'xwem-client-iconify)
--- orig/lisp/xwem-main.el
+++ mod/lisp/xwem-main.el
@@ -236,8 +236,11 @@
(setf (X-Dpy-log-buffer (xwem-dpy)) "*xwem-debug*")
(X-Dpy-set-log-routines (xwem-dpy) xwem-debug-routines))
+ ;; Mark as started
(setq xwem-started t)
+ ;; Initialize misc stuff
+ (xwem-misc-init)
;; Create initial frames
(xwem-frames-init)
--- orig/lisp/xwem-minibuffer.el
+++ mod/lisp/xwem-minibuffer.el
@@ -249,9 +249,12 @@
(defcustom xwem-minib-specifiers
'((default-toolbar-visible-p . nil)
+
+ ;; Gutters
(default-gutter-visible-p . t)
(top-gutter . nil)
(top-gutter-border-width . 1)
+
(menubar-visible-p . nil)
(horizontal-scrollbar-visible-p . nil)
((face-font 'default) . xwem-minibuffer-font))
@@ -433,7 +436,7 @@
(defun xwem-refit-minibuffer (cl)
"Refit xwem minibuffer client CL."
- (xwem-debug 'xwem-minib "Refiting ..")
+ (xwem-debug 'xwem-misc "Minib: Refiting .. to %S" '(xwem-cl-new-xgeom cl))
(let ((cl-xgeom (xwem-cl-xgeom cl))
(cl-nx (and (xwem-cl-new-xgeom cl)
@@ -687,28 +690,35 @@
;;; xwem minibuffer modeline using top gutter
(defvar xwem-modeline-format
- '(("--")
- ((symbol-name (xwem-cl-manage-type cl)))
- (": ")
- ("[")
- ((or (car (xwem-client-application cl))
- "unknown"))
- ("] ")
- ((xwem-client-name cl) modeline-buffer-id)
- (" ")
+ '("--"
+ (symbol-name (xwem-cl-manage-type cl))
+ ": "
+ "["
+ (or (car (xwem-client-application cl))
+ "unknown")
+ "]"
+
+ ;; Some additional info
+ " "
+ (if (xwem-cl-marked-p cl) "*" "-")
+ (let ((reg (xwem-client-property cl 'register)))
+ (if reg (list (format "%c" reg) 'bold) "-"))
+ " "
+
+ (list (xwem-client-name cl) 'modeline-buffer-id)
+ " "
;; Minor modes
- ("(")
- ((mapconcat 'identity
- (delq nil (mapcar #'(lambda (mm)
- (and (symbol-value (car mm))
- (cadr mm)))
- xwem-minor-mode-alist)) " "))
- (")")
- ("----")
- ((let ((usz (xwem-cl-get-usize cl)))
- (format "%dx%d" (car usz) (cdr usz))))
- ("--")
- )
+ "("
+ (mapconcat 'identity
+ (delq nil (mapcar #'(lambda (mm)
+ (and (symbol-value (car mm))
+ (cadr mm)))
+ xwem-minor-mode-alist)) " ")
+ ")"
+ "----"
+ (let ((usz (xwem-cl-get-usize cl)))
+ (format "%dx%d" (car usz) (cdr usz)))
+ "--")
"Modeline format.")
(xwem-make-variable-client-local 'xwem-modeline-format)
@@ -718,8 +728,14 @@
(let ((cl (xwem-cl-selected)))
(setq cl cl) ; shutup compiler
(condition-case nil
- (let ((str (copy-sequence (eval (car me)))))
- (xwem-str-with-faces str (append '(modeline) (cdr
me))))
+ (let ((str "") (faces nil))
+ (setq me (eval me))
+ (if (listp me)
+ (setq str (copy-sequence (car me))
+ faces (cdr me))
+ (setq str (copy-sequence me)
+ faces nil))
+ (xwem-str-with-faces str (append '(modeline) faces)))
(t "<error>"))))
xwem-modeline-format ""))
@@ -743,6 +759,8 @@
(add-hook 'xwem-cl-change-hook 'xwem-modeline-redraw)
(add-hook 'xwem-client-select-hook 'xwem-modeline-redraw)
+ (set-specifier top-gutter-visible-p t
+ (xwem-minib-frame xwem-minibuffer))
;; Start showing gutter
(xwem-modeline-redraw-1)
;; Fix xwem minibuffer height size
--- orig/lisp/xwem-misc.el
+++ mod/lisp/xwem-misc.el
@@ -44,6 +44,7 @@
(require 'xlib-img)
(require 'xwem-load)
+(require 'advice)
(eval-and-compile
(defvar iswitchb-buflist nil) ; shutup compiler
@@ -430,6 +431,13 @@
(X-Win-rem-prop ,xwin 'xwem-cl)
(X-Win-put-prop ,xwin 'xwem-cl ,cl)))
+(defadvice XCreateWindow (after xwin-created-by-xwem activate)
+ "Mark window's created on xwem-dpy as window created by xwem."
+ (let ((dpy (ad-get-arg 0))
+ (xwin ad-return-value))
+ (when (eq dpy (xwem-dpy))
+ (X-Win-put-prop xwin 'xwin-created-by-xwem t))))
+
;;; Functions
;;;###xwem-autoload
(defun xwem-misc-colorspec->rgb-vector (colspec)
@@ -1613,7 +1621,7 @@
;; 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)
+ (pushnew xwin xwem-misc-always-on-top-stack :test 'X-Win-equal)
(setq xwem-misc-always-on-top-stack
(sort xwem-misc-always-on-top-stack
#'(lambda (xwin1 xwin2)
@@ -1652,8 +1660,18 @@
(let* ((rank (or (xwem-xwin-rank xwin) 0))
(bsib (and rank (xwem-misc-find-below-sibling '> rank))))
(cond ((not bsib)
+ (when (memq xwin xwem-misc-always-on-top-stack)
+ (setq xwem-misc-always-on-top-stack
+ (nconc (delq xwin xwem-misc-always-on-top-stack)
+ (list xwin))))
(XRaiseWindow (xwem-dpy) xwin))
((not (X-Win-equal xwin bsib))
+ ;; Adjust rank stack in case if ranks are equal
+ (when (memq xwin xwem-misc-always-on-top-stack)
+ (setq xwem-misc-always-on-top-stack
+ (xwem-insert-before
+ (delq xwin xwem-misc-always-on-top-stack)
+ bsib xwin)))
(XConfigureWindow (xwem-dpy) xwin
(make-X-Conf :stackmode X-Below
:sibling bsib))))))
@@ -1664,13 +1682,18 @@
(let* ((rank (xwem-xwin-rank xwin))
(bsib (and rank (xwem-misc-find-below-sibling '>= rank))))
(cond ((not bsib)
+ (when (memq xwin xwem-misc-always-on-top-stack)
+ (setq xwem-misc-always-on-top-stack
+ (cons xwin (delq xwin xwem-misc-always-on-top-stack))))
(XLowerWindow (xwem-dpy) xwin))
((not (X-Win-equal xwin bsib))
;; Adjust rank stack in case if ranks are equal
- (when (= rank (xwem-xwin-rank bsib))
- (xwem-insert-before
- (delq xwin xwem-misc-always-on-top-stack)
- bsib xwin))
+ (when (and (memq xwin xwem-misc-always-on-top-stack)
+ (= rank (xwem-xwin-rank bsib)))
+ (setq xwem-misc-always-on-top-stack
+ (xwem-insert-before
+ (delq xwin xwem-misc-always-on-top-stack)
+ bsib xwin)))
(XConfigureWindow (xwem-dpy) xwin
(make-X-Conf :stackmode X-Below
:sibling bsib))))))
@@ -1678,10 +1701,4 @@
(provide 'xwem-misc)
-;;; On-load hooks:
-; - Misc initialize
-(if xwem-started
- (xwem-misc-init)
- (add-hook 'xwem-before-init-wins-hook 'xwem-misc-init))
-
;;; xwem-misc.el ends here
--- orig/lisp/xwem-netwm.el
+++ mod/lisp/xwem-netwm.el
@@ -451,8 +451,27 @@
;;;###autoload
(defun xwem-manage-fullscreen (cl)
"Manage method for fullscreen client CL."
- (XReparentWindow (xwem-dpy) (xwem-cl-xwin cl)
- (xwem-rootwin) 0 0)
+ ;; Find out the place where to manage client
+ (let ((tpnt (car (XTranslateCoordinates
+ (xwem-dpy) (xwem-cl-xwin cl)
+ (xwem-rootwin) 0 0)))
+ (xin (X-XIneramaQueryScreens (xwem-dpy)))
+ (rx 0) (ry 0))
+ ;; Xinerama stuff
+ (when (car xin)
+ ;; XInerama enabled
+ (while (setq xin (cdr xin))
+ (when (and (>= (X-Point-x tpnt) (X-Rect-x (car xin)))
+ (<= (X-Point-x tpnt)
+ (+ (X-Rect-x (car xin)) (X-Rect-width (car xin))))
+ (>= (X-Point-y tpnt) (X-Rect-y (car xin)))
+ (<= (X-Point-y tpnt)
+ (+ (X-Rect-y (car xin)) (X-Rect-height (car xin)))))
+ (setq rx (X-Rect-x (car xin))
+ ry (X-Rect-y (car xin))
+ xin nil))))
+
+ (XReparentWindow (xwem-dpy) (xwem-cl-xwin cl) (xwem-rootwin) rx ry))
;; Set geometry to initial
(setf (xwem-cl-new-xgeom cl)
--- orig/lisp/xwem-rooter.el
+++ mod/lisp/xwem-rooter.el
@@ -115,6 +115,7 @@
"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)))
(defun xwem-deactivate-rooter (cl &optional type)
@@ -123,15 +124,6 @@
(error 'xwem-error "Trying to deselect rooted client!!!"))
(xwem-misc-lower-xwin (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-transient.el
+++ mod/lisp/xwem-transient.el
@@ -96,13 +96,17 @@
;; Apply properties specific to transient-for clients
(xwem-cl-apply-plist cl xwem-transient-client-properties)
+ ;; XXX make root window be parent
(XReparentWindow (xwem-dpy) xwin (xwem-rootwin)
(X-Geom-x (xwem-cl-xgeom cl))
(X-Geom-y (xwem-cl-xgeom cl)))
(when (xwem-cl-p trc)
(setf (xwem-cl-translist trc)
- (cons cl (xwem-cl-translist trc))))
+ (cons cl (xwem-cl-translist trc)))
+ ;; And inherit always on top rank
+ (xwem-misc-set-xwin-always-on-top
+ (xwem-cl-xwin cl) (xwem-xwin-rank (xwem-cl-xwin trc))))
;; Install transient local keymap
(xwem-use-local-map xwem-transient-keymap cl)
@@ -110,8 +114,7 @@
;; Select it if needed
(when (or (null trc)
(xwem-cl-selected-p trc))
- (xwem-select-client cl))
- ))
+ (xwem-select-client cl))))
(define-xwem-deffered xwem-transient-apply-state (cl)
"Apply CL's state to life."
--- orig/utils/xwem-appcollect.el
+++ mod/utils/xwem-appcollect.el
@@ -72,7 +72,7 @@
(xwem-client-kill cl t)
(setq xwem-app-collect-wait nil)))
-;;;###xwem-autoload(autoload 'xwem-appcollect "xwem-appcollect" nil nil)
+;;;###autoload(autoload 'xwem-appcollect "xwem-appcollect" nil nil)
(defun xwem-appcollect (app-names &optional params operation)
"Collect and return applications manage specs.
APP-NAMES is a list of applications to collect.
--- orig/utils/xwem-osd.el
+++ mod/utils/xwem-osd.el
@@ -361,13 +361,13 @@
(XCreatePixmap xdpy (make-X-Pixmap :dpy xdpy :id (X-Dpy-get-id xdpy))
(xwem-osd-xwin osd) 1 (xwem-osd-width osd)
(xwem-osd-height osd)))
-
- (setf (xwem-osd-mask-gc osd)
- (XCreateGC xdpy (xwem-osd-xmask osd)
- (make-X-Gc :dpy xdpy :id (X-Dpy-get-id xdpy)
- :foreground 1.0
- :background 0.0
- :font (X-Font-get xdpy xwem-osd-default-font))))
+ (unless (xwem-osd-mask-gc osd)
+ (setf (xwem-osd-mask-gc osd)
+ (XCreateGC xdpy (xwem-osd-xmask osd)
+ (make-X-Gc :dpy xdpy :id (X-Dpy-get-id xdpy)
+ :foreground 1.0
+ :background 0.0
+ :font (X-Font-get xdpy
xwem-osd-default-font)))))
(xwem-osd-clear-mask osd)))
(defun xwem-osd-set-height (osd new-height)
--- orig/xwem-agent/xwem-agent.c
+++ mod/xwem-agent/xwem-agent.c
@@ -115,11 +115,11 @@
char *outfile = NULL;
enum {
- STATE_WAITINNG,
+ STATE_WAITING,
STATE_RUNNING,
STATE_KILLING
};
-static int state = STATE_WAITINNG; /* xwem-agent current state */
+static int state = STATE_WAITING; /* xwem-agent current state */
/*
* Evil hackery do display verbose logs
@@ -158,6 +158,12 @@
pid_t
start_emacs()
{
+ if (epid > 0) {
+ /* Already running emacs */
+ xverbose(" - (S)XEmacs already running, not starting");
+ return -1;
+ }
+
if ((epid = fork()) == 0) {
setenv("XWEM_RUNNING", "notyet", 1);
@@ -179,6 +185,10 @@
}
}
+ /* Remove signal handlers */
+ signal(SIGCHLD, SIG_DFL);
+ signal(SIGHUP, SIG_DFL);
+
execvp(emacs, emacs_argv);
/* Execve failed :( */
@@ -223,10 +233,11 @@
XSetInputFocus(xdpy, PointerRoot, RevertToPointerRoot, CurrentTime);
xverbose(" + InputFocus set to PointerRoot ..");
- if ((state == STATE_KILLING) || autodetect)
- start_emacs();
- else
- state = STATE_WAITINNG;
+ if ((state == STATE_KILLING) || autodetect) {
+ if (start_emacs() < 0)
+ state = STATE_WAITING;
+ } else
+ state = STATE_WAITING;
}
void
@@ -333,7 +344,7 @@
xverbose(" + Magic keys at C-Sh-ESC(exit), C-Sh-F6(SIGABORT),"
" C-Sh-F9(SIGKILL) and C-Sh-F11(SIGTERM) ..");
- state = STATE_WAITINNG;
+ state = STATE_WAITING;
if (o_flag == 0)
/* Start (S)XEmacs */
|