xwem-patches
[Top] [All Lists]

Summary for xwem--main--2.1--patch-42

From: Zajcev Evgeny <lg@xxxxxxxx>
Subject: Summary for xwem--main--2.1--patch-42
Date: Sat, 2 Apr 2005 03:19:58 +0400 (MSD)
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 */




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