xwem-patches
[Top] [All Lists]

Summary for xwem--main--2.2--patch-46

From: Zajcev Evgeny <lg@xxxxxxxx>
Subject: Summary for xwem--main--2.2--patch-46
Date: Fri, 13 Jan 2006 03:50:05 +0300
Sender: xwem-patches-bounces@xxxxxxxx
Location: lg@xxxxxxxxxxxxxx http://arch.xwem.org/2005/

Revision: xwem--main--2.2--patch-46
Archive: lg@xxxxxxxxxxxxxx
Creator: Zajcev Evgeny <lg@xxxxxxxx>
Date: Fri Jan 13 03:50:00 MSK 2006
Standard-date: 2006-01-13 00:50:00 GMT
Modified-files: dockapp/xwem-battery.el
    dockapp/xwem-time.el lisp/xwem-clients.el
    lisp/xwem-events.el lisp/xwem-keyboard.el
    lisp/xwem-keymacro.el lisp/xwem-main.el
    lisp/xwem-misc.el lisp/xwem-netwm.el
    lisp/xwem-selections.el lisp/xwem-tray.el
    utils/xwem-osd.el utils/xwem-worklog.el
New-patches: lg@xxxxxxxxxxxxxx/xwem--main--2.2--patch-46
Summary: First version that works with ffi-xlib
Keywords: porting, ffi-xlib

Apart from fixing xwem to support ffi-xlib there are some non-related
fixes/addons.

* dockapp/xwem-battery.el: [fix] Get and draw AC-Line status properly.

* dockapp/xwem-time.el: [fix] Some xpm format fixes.

* lisp/xwem-clients.el: [fix] Support ffi-xlib when about to do
  XSendEvent

* lisp/xwem-keyboard.el: [fix] Support ffi-xlib when about to do
  XSendEvent

* lisp/xwem-keymacro.el (xwem-keymacro-init): [fix] Do not signal error
  if XTEST or XRECORD extension is missing.

* lisp/xwem-main.el (xwem-init): [fix] Properly select xwem minibuffer
  frame, do not error even if xwem minibuffer is not yet alive/created.

* lisp/xwem-misc.el (xwem-misc-find-emacs-frame): [rewrote] Experimental 

* lisp/xwem-selections.el (xwem-selection): [semchg] Supports typed
  selections.

* lisp/xwem-selections.el (xwem-copy-cutbuffer): [fix] Deactivate region
  after H-w

* utils/xwem-osd.el (xwem-osd-instance-change): [fix] Proper use of
  `XChangeGC'

* utils/xwem-worklog.el: [typo] breaks -> bricks

* added files

    {arch}/xwem/xwem--main/xwem--main--2.2/lg@xxxxxxxxxxxxxx/patch-log/patch-46

* modified files

--- orig/dockapp/xwem-battery.el
+++ mod/dockapp/xwem-battery.el
@@ -196,10 +196,10 @@
 
     (when (or force (not (eq dheight (xwem-batt-old-dheight xwin)))
               (not (eq ac-line-p (xwem-batt-old-ac-line-p xwin))))
-      (XFillRectangle xdpy xpix (XDefaultGC xdpy)
+      (XFillRectangle xdpy xpix (xwem-face-get-gc 'xwem-face-white)
                       0 0 xwem-batt-width xwem-batt-height)
       ;; Outline battery
-      (XFillRectangle xdpy xpix (XDefaultGC xdpy)
+      (XFillRectangle xdpy xpix (xwem-face-get-gc 'xwem-face-white)
                       0 0 xwem-batt-width xwem-batt-height)
       (XDrawRectangle xdpy xpix (xwem-face-get-gc 'xwem-face-black)
                       1 2 (- xwem-batt-width 3) (- xwem-batt-height 4))
@@ -339,26 +339,30 @@
 ;;;; In case there is no battery.ell
 (unless (fboundp 'apm-battery)
   (defvar apm-program "apm")
-  (defvar apm-state-percent-arguments "-bl")
+  (defvar apm-acline-status-percent-arguments "-abl")
   (defvar apm-status-alist
     '((0 . high) (1 . low) (2 . critical) (3 . charging)))
 
   (defun apm-battery ()
     "Return battery status."
-    (let (state percents)
+    (let (acline status percents)
       (with-temp-buffer
         (call-process apm-program nil (current-buffer)
-                      nil apm-state-percent-arguments)
+                      nil apm-acline-status-percent-arguments)
         (goto-char (point-min))
-        (setq state (cdr (assq (string-to-int
-                                (buffer-substring (point-at-bol)
-                                                  (point-at-eol)))
-                               apm-status-alist)))
+        (setq acline (= (string-to-int
+                         (buffer-substring (point-at-bol)
+                                           (point-at-eol))) 1))
+        (forward-line)
+        (setq status (cdr (assq (string-to-int
+                                 (buffer-substring (point-at-bol)
+                                                   (point-at-eol)))
+                                apm-status-alist)))
         (forward-line)
         (setq percents (string-to-int
                         (buffer-substring (point-at-bol)
                                           (point-at-eol)))))
-      (list (eq state 'charging) state percents))))
+      (list acline status percents))))
 
 
 (provide 'xwem-battery)


--- orig/dockapp/xwem-time.el
+++ mod/dockapp/xwem-time.el
@@ -484,10 +484,10 @@
                                       "\"..........\"\n"
                                       "};\n"))
 
-(defconst xwem-time-xpm-load05 (concat "/* XPM */\n"
+(defconst xwem-time-xpm-load05 (concat "/* XPM */"
                                       "static char *noname[] = {\n"
                                       "/* width height ncolors chars_per_pixel 
*/\n"
-                                      "\"10 13 3 1,\"\n"
+                                      "\"10 13 3 1\",\n"
                                       "\/* colors \*/\n"
                                       "\"` s None c None\",\n"
                                       "\"a c #0AB224\",\n"
@@ -780,7 +780,8 @@
                                       "\"   XoXXXXXXXXXoXoo\",\n"
                                       "\"   .XXXXXXXXXXX.oo\",\n"
                                       "\"     ooooooooooooo\",\n"
-                                      "\"     ooooooooooooo\"};\n"))
+                                      "\"     ooooooooooooo\"\n"
+                                       "};\n"))
 
 (defconst xwem-time-xpm-no-letter (concat "/* XPM */\n"
                                          "static char * jmail_xpm[] = {\n"
@@ -801,8 +802,8 @@
                                          "\"   o.x        .ox \",\n"
                                          "\"   ooooooooooooox \",\n"
                                          "\"   xxxxxxxxxxxxxx \",\n"
-                                         "\"                  \"};\n"))
-
+                                         "\"                  \"\n"
+                                          "};\n"))
 
 
 ;;; Huge amount of macroses


--- orig/lisp/xwem-clients.el
+++ mod/lisp/xwem-clients.el
@@ -662,23 +662,38 @@
   "Send config info to window."
   (let ((clgeom (xwem-cl-xgeom cl))
         (win (xwem-cl-xwin cl)))
-    (XSendEvent (xwem-dpy) win nil XM-StructureNotify
-                (X-Create-message
-                 (list [1 X-ConfigureNotify] ;type
-                       [1 nil]          ;detail
-                       [2 2806]         ;seq
-                       [4 (X-Win-id win)] ;event
-                       [4 (X-Win-id win)] ;window
-                       [4 X-None]       ;above sibling
-                       (vector 2 (X-Geom-x clgeom)) ; shutup compiler
-                       [2 (X-Geom-y clgeom)]
-                       [2 (X-Geom-width clgeom)]
-                       [2 (X-Geom-height clgeom)]
-                       [2 (X-Geom-border-width clgeom)] ;XXX
-                       [1 nil]          ;pad override
-                       [1 nil]          ;pad
-                       )))
-    ))
+    (if (featurep 'ffi-xlib)
+        ;; TODO: Remove `eval'
+        (eval '(XSendEvent (xwem-dpy) win nil XM-StructureNotify
+                    (let ((xev (make-ffi-object 'XConfigureEvent)))
+                      (setf (XConfigureEvent->type xev) X-ConfigureNotify
+                            (XConfigureEvent->event xev) (X-Win-id win)
+                            (XConfigureEvent->window xev) (X-Win-id win)
+                            (XConfigureEvent->above xev) X-None
+                            (XConfigureEvent->x xev) (X-Geom-x clgeom)
+                            (XConfigureEvent->y xev) (X-Geom-y clgeom)
+                            (XConfigureEvent->width xev) (X-Geom-width clgeom)
+                            (XConfigureEvent->height xev) (X-Geom-height 
clgeom)
+                            (XConfigureEvent->border_width xev) (X-Geom-width 
clgeom))
+                      (ffi-address-of xev))))
+        
+      (XSendEvent (xwem-dpy) win nil XM-StructureNotify
+                  (X-Create-message
+                   (list [1 X-ConfigureNotify] ;type
+                         [1 nil]        ;detail
+                         [2 2806]       ;seq
+                         [4 (X-Win-id win)] ;event
+                         [4 (X-Win-id win)] ;window
+                         [4 X-None]     ;above sibling
+                         (vector 2 (X-Geom-x clgeom)) ; shutup compiler
+                         [2 (X-Geom-y clgeom)]
+                         [2 (X-Geom-width clgeom)]
+                         [2 (X-Geom-height clgeom)]
+                         [2 (X-Geom-border-width clgeom)] ;XXX
+                         [1 nil]        ;pad override
+                         [1 nil]        ;pad
+                         )))
+      )))
 
 
 ;;;###xwem-autoload
@@ -1142,24 +1157,37 @@
 ;;;###xwem-autoload
 (defun xwem-client-sendmsg-atom (cl atom &optional time)
   "Send Client message to client CL."
-  (XSendEvent (xwem-dpy) (xwem-cl-xwin cl) nil 0
-              (X-Create-message
-               (list [1 X-ClientMessage] ; type
-                     [1 X-format-32]    ; format
-                     [2 1000]           ; XXX seq
-                     [4 (X-Win-id (xwem-cl-xwin cl))] ; window
-                     [4 (X-Atom-id (X-Atom-find-by-name (xwem-dpy) 
"WM_PROTOCOLS"))]
-                     [4 (X-Atom-id atom)]
-                     [4 (or time X-CurrentTime)]
-                     [4 nil]))))
+  (if (featurep 'ffi-xlib)
+      ;; TODO: Remove `eval'
+      (eval '(XSendEvent (xwem-dpy) (xwem-cl-xwin cl) nil 0
+                  (let ((xev (make-ffi-object 'XClientMessageEvent)))
+                    (setf (XClientMessageEvent->type xev) X-ClientMessage
+                          (XClientMessageEvent->format xev) X-format-32
+                          (XClientMessageEvent->window xev) (X-Win-id 
(xwem-cl-xwin cl))
+                          (XClientMessageEvent->message_type xev) (X-Atom-id 
(X-Atom-find-by-name (xwem-dpy) "WM_PROTOCOLS")))
+                    (ffi-store xev (ffi-slot-offset 'XClientMessageEvent 
'data) 'long (X-Atom-id atom))
+                    (ffi-store xev (+ (ffi-slot-offset 'XClientMessageEvent 
'data) 4)
+                               'long (or time X-CurrentTime))
+                    (ffi-address-of xev))))
+
+    (XSendEvent (xwem-dpy) (xwem-cl-xwin cl) nil 0
+                (X-Create-message
+                 (list [1 X-ClientMessage] ; type
+                       [1 X-format-32]  ; format
+                       [2 1000]         ; XXX seq
+                       [4 (X-Win-id (xwem-cl-xwin cl))] ; window
+                       [4 (X-Atom-id (X-Atom-find-by-name (xwem-dpy) 
"WM_PROTOCOLS"))]
+                       [4 (X-Atom-id atom)]
+                       [4 (or time X-CurrentTime)]
+                       [4 nil])))))
 
 (defun xwem-client-delete-window (cl)
   "Close xwem client CL in safe manner.
 Return non-nil, if CL supports WM_DELETE_WINDOW."
-  (when (XWMProtocol-set-p (xwem-dpy)
-                           (xwem-hints-wm-protocols (xwem-cl-hints cl)) 
"WM_DELETE_WINDOW")
-    (xwem-client-sendmsg-atom cl
-                              (X-Atom-find-by-name (xwem-dpy) 
"WM_DELETE_WINDOW"))
+  (when (XWMProtocol-set-p
+         (xwem-dpy) (xwem-hints-wm-protocols (xwem-cl-hints cl)) 
"WM_DELETE_WINDOW")
+    (xwem-client-sendmsg-atom
+     cl (X-Atom-find-by-name (xwem-dpy) "WM_DELETE_WINDOW"))
     t))
 
 (define-xwem-deffered xwem-client-apply-state (cl)


--- orig/lisp/xwem-events.el
+++ mod/lisp/xwem-events.el
@@ -95,7 +95,6 @@
     (if (xwem-cl-p cl)
         ;; Transition from Withdrawn->Normal/Iconic state
         (xwem-cl-honour-init-state cl)
-
       ;; Initial window manage
       (xwem-xwin-try-to-manage (X-Event-xmaprequest-window xev)))))
 


--- orig/lisp/xwem-keyboard.el
+++ mod/lisp/xwem-keyboard.el
@@ -856,23 +856,40 @@
                 (setq keymods (nconc keymods (cdr keycode)))
                 (setq keycode (car keycode))
 
-                (XSendEvent (xwem-dpy) (xwem-cl-xwin client)
-                            nil XM-KeyPress
-                            (X-Create-message
-                             (list [1 X-KeyPress] ;type
-                                   [1 keycode] ;detail
-                                   [2 2806] ; XXX seq
-                                   [4 X-CurrentTime] ; time
-                                   [4 (X-Win-id (xwem-rootwin))] ; root
-                                   [4 (X-Win-id (xwem-cl-xwin client))] ; event
-                                   [4 X-None] ; child
-                                   [2 0] ; root-x
-                                   [2 0] ; root-y
-                                   [2 0] ; event-x
-                                   [2 0] ; event-y
-                                   [2 (xwem-kbd-emods->xmodmask keymods)] ; 
state
-                                   [1 t] ; same-screen
-                                   [1 nil]))))
+                (if (featurep 'ffi-xlib)
+                    (eval '(XSendEvent (xwem-dpy) (xwem-cl-xwin client)
+                                nil XM-KeyPress
+                                (let ((xev (make-ffi-object 'XEvent)))
+                                  (setf (XKeyEvent->type xev) X-KeyPress
+                                        (XKeyEvent->keycode xev) keycode
+                                        (XKeyEvent->time xev) X-CurrentTime
+                                        (XKeyEvent->root xev) (X-Win-id 
(xwem-rootwin))
+                                        (XKeyEvent->window xev) (X-Win-id 
(xwem-cl-xwin client))
+                                        (XKeyEvent->state xev) 
(xwem-kbd-emods->xmodmask keymods)
+                                        (XKeyEvent->same_screen xev) 1
+                                        (XKeyEvent->x xev) 0
+                                        (XKeyEvent->y xev) 0
+                                        (XKeyEvent->x_root xev) 0
+                                        (XKeyEvent->y_root xev) 0)
+                                  (ffi-address-of xev))))
+
+                  (XSendEvent (xwem-dpy) (xwem-cl-xwin client)
+                              nil XM-KeyPress
+                              (X-Create-message
+                               (list [1 X-KeyPress] ;type
+                                     [1 keycode] ;detail
+                                     [2 2806] ; XXX seq
+                                     [4 X-CurrentTime] ; time
+                                     [4 (X-Win-id (xwem-rootwin))] ; root
+                                     [4 (X-Win-id (xwem-cl-xwin client))] ; 
event
+                                     [4 X-None] ; child
+                                     [2 0] ; root-x
+                                     [2 0] ; root-y
+                                     [2 0] ; event-x
+                                     [2 0] ; event-y
+                                     [2 (xwem-kbd-emods->xmodmask keymods)] ; 
state
+                                     [1 t] ; same-screen
+                                     [1 nil])))))
             keys))))
 
 ;;;###xwem-autoload


--- orig/lisp/xwem-keymacro.el
+++ mod/lisp/xwem-keymacro.el
@@ -151,36 +151,35 @@
   ;; events.
   (let ((xrec-ext (X-XRecordQueryVersion (xwem-dpy)))
         (xtest-ext (XQueryExtension (xwem-dpy) "XTEST")))
-    (when (or (null (car xrec-ext))
-              (null (car xtest-ext)))
-      ;; No XRECORD or XTEST extension support
-      (error 'xwem-error "RECORD or XTEST extension missing"))
-
-    ;; (xwem-dpy) supports XRECORD extension
-    (setq xwem-keymacro-rcontext (make-X-RecordContext
-                                  :dpy (xwem-dpy)
-                                  :id (X-Dpy-get-id (xwem-dpy))))
-    (setq xwem-keymacro-rranges
-          ;; We are only interested in KeyPrees/KeyRelease events
-          (list (make-X-RecordRange
-                 :device-events (cons X-KeyPress X-KeyRelease))))
-
-    (setq xwem-keymacro-rclient (float X-XRecordAllClients))
-    (setq xwem-keymacro-rcontext (X-XRecordCreateContext
-                                  (xwem-dpy) xwem-keymacro-rcontext 0
-                                  (list xwem-keymacro-rclient)
-                                  xwem-keymacro-rranges))
-    (X-XRecordRegisterClients (xwem-dpy) xwem-keymacro-rcontext 0
-                              (list xwem-keymacro-rclient)
-                              xwem-keymacro-rranges)
-
-    (setq xwem-keymacro-dpy (XOpenDisplay
-                             (format "%s:%d" (X-Dpy-name (xwem-dpy))
-                                     (X-Dpy-default-screen (xwem-dpy)))))
-    (when xwem-keymacro-debug
-      (setf (X-Dpy-log-buffer xwem-keymacro-dpy) "XREC.log"))
+    (if (or (null (car xrec-ext)) (null (car xtest-ext)))
+        ;; No XRECORD or XTEST extension support
+        (xwem-message 'error "RECORD or XTEST extension missing")
+
+      ;; (xwem-dpy) supports XRECORD extension
+      (setq xwem-keymacro-rcontext (make-X-RecordContext
+                                    :dpy (xwem-dpy)
+                                    :id (X-Dpy-get-id (xwem-dpy))))
+      (setq xwem-keymacro-rranges
+            ;; We are only interested in KeyPrees/KeyRelease events
+            (list (make-X-RecordRange
+                   :device-events (cons X-KeyPress X-KeyRelease))))
+
+      (setq xwem-keymacro-rclient (float X-XRecordAllClients))
+      (setq xwem-keymacro-rcontext (X-XRecordCreateContext
+                                    (xwem-dpy) xwem-keymacro-rcontext 0
+                                    (list xwem-keymacro-rclient)
+                                    xwem-keymacro-rranges))
+      (X-XRecordRegisterClients (xwem-dpy) xwem-keymacro-rcontext 0
+                                (list xwem-keymacro-rclient)
+                                xwem-keymacro-rranges)
+
+      (setq xwem-keymacro-dpy (XOpenDisplay
+                               (format "%s:%d" (X-Dpy-name (xwem-dpy))
+                                       (X-Dpy-default-screen (xwem-dpy)))))
+      (when xwem-keymacro-debug
+        (setf (X-Dpy-log-buffer xwem-keymacro-dpy) "XREC.log"))
 
-    (setq xwem-keymacro-initialized t)))
+      (setq xwem-keymacro-initialized t))))
 
 (defun xwem-keymacro-extract (xevs &optional cutlen)
   "Extract keyboard macro from X-Events list XEVS.


--- orig/lisp/xwem-main.el
+++ mod/lisp/xwem-main.el
@@ -299,8 +299,10 @@
     ;; When XEmacs frame deselects, select xwem minibuffer
     (add-hook 'deselect-frame-hook
               #'(lambda ()
-                  (unless (eq (xwem-minib-frame xwem-minibuffer)
-                              (selected-frame))
+                  (when (and (xwem-minib-p xwem-minibuffer)
+                             (framep (xwem-minib-frame xwem-minibuffer))
+                             (not (eq (xwem-minib-frame xwem-minibuffer)
+                                      (selected-frame))))
                     (select-frame (xwem-minib-frame xwem-minibuffer)))))
 
     ;; Raise/lower minibuffer


--- orig/lisp/xwem-misc.el
+++ mod/lisp/xwem-misc.el
@@ -654,25 +654,27 @@
 HACK, DO NOT USE."
   (let ((fr (xwem-cl-get-sys-prop cl 'emacs-frame)))
     (if fr
-        (if (framep fr) fr nil)
-
+        (and (framep fr) fr)
       ;; Not yet in cl's plist
-      (let ((frames (frame-list))
-            xtr)
-
-        (setq xtr (XQueryTree (xwem-dpy) (xwem-cl-xwin cl)))
-        (if (car xtr)
-            (setq xtr (mapcar 'X-Win-id (cdr (cdr (cdr (cdr xtr))))))
-          (setq xtr nil))
-
+      (let ((frames (frame-list)))
         (while (and frames
-                    (not (member 
-                          (float (- (string-to-int
-                                     (or (frame-property
-                                          (car frames) 'window-id) "0")) 2))
-                          xtr)))
+                    (not (= (- (string-to-int
+                                (or (frame-property
+                                     (car frames) 'window-id) "0")) 3)
+                            (X-Win-id (xwem-cl-xwin cl)))))
           (setq frames (cdr frames)))
-
+;            (xtr (XQueryTree (xwem-dpy) (xwem-cl-xwin cl))))
+;        (if (car xtr)
+;            (setq xtr (mapcar 'X-Win-id (cdr (cdr (cdr (cdr xtr))))))
+;          (setq xtr nil))
+;        (while (and frames
+;                    (not (member*
+;                          (- (string-to-int
+;                              (or (frame-property
+;                                   (car frames) 'window-id) "0")) 2)
+;                          xtr :test #'=)))
+;          (setq frames (cdr frames)))
+        
         (if (framep (car frames))
             (xwem-cl-put-sys-prop cl 'emacs-frame (car frames))
           (xwem-cl-put-sys-prop cl 'emacs-frame 'no-emacs-frame))
@@ -1032,12 +1034,12 @@
 BUGS: prefix ARG might not work if region is active or some cutbuffer
 is selected."
   (xwem-interactive
-   (list (or (xwem-selection)
+   (list (or (xwem-selection 'local)
              (xwem-read-from-minibuffer (if xwem-prefix-arg
                                             "XWEM (insert) Calc: "
                                           "XWEM Calc: ")))
          xwem-prefix-arg))
-  (zmacs-deactivate-region)
+  (zmacs-deactivate-region)             ; XXX
   (let ((result (calc-eval expr)))
     (if arg
         (xwem-kbd-add-pending-keys result)
@@ -1393,38 +1395,42 @@
 (defun xwem-misc-xwin-background-mode (xwin x y &optional width height)
   "Return XWIN's background mode in rectange WIDTHxHEIGHT+X+y.
 Background mode is one of `light' or `dark'."
-  (let ((xgeom (XGetGeometry (xwem-dpy) xwin)))
-    ;; Adjust x/y/width/height
-    (when (< x 0)
-      (setq x 0))
-    (when (< y 0)
-      (setq y 0))
-    (when (and width (< width 0))
-      (setq width nil))
-    (when (and height (< height 0))
-      (setq height nil))
-
-    (unless width
-      (setq width 10))
-    (unless height
-      (setq height 10))
-    (when (> width (X-Geom-width xgeom))
-      (setq width (X-Geom-width xgeom)))
-    (when (> height (X-Geom-height xgeom))
-      (setq height (X-Geom-height xgeom)))
-    (when (> x (X-Geom-width xgeom))
-      (setq x (- (X-Geom-width xgeom) width)))
-    (when (> y (X-Geom-height xgeom))
-      (setq y (- (X-Geom-height xgeom) height))))
-
-  (let* ((ximg (XImageGet (xwem-dpy) xwin x y width height))
-         (cv (nth 3 (XQueryColors (xwem-dpy) (XDefaultColormap (xwem-dpy))
-                                  (mapcan 'identity (X-Image-get-prop ximg 
'px-layout)))))
-         (vv (/ (apply '+ (apply 'nconc cv)) (length cv))))
-
-    (XDestroyImage ximg)
-    (if (< vv xwem-background-mode-bound)
-        'dark 'light)))
+  (condition-case nil
+      (progn
+        (let ((xgeom (XGetGeometry (xwem-dpy) xwin)))
+          ;; Adjust x/y/width/height
+          (when (< x 0)
+            (setq x 0))
+          (when (< y 0)
+            (setq y 0))
+          (when (and width (< width 0))
+            (setq width nil))
+          (when (and height (< height 0))
+            (setq height nil))
+
+          (unless width
+            (setq width 10))
+          (unless height
+            (setq height 10))
+          (when (> width (X-Geom-width xgeom))
+            (setq width (X-Geom-width xgeom)))
+          (when (> height (X-Geom-height xgeom))
+            (setq height (X-Geom-height xgeom)))
+          (when (> x (X-Geom-width xgeom))
+            (setq x (- (X-Geom-width xgeom) width)))
+          (when (> y (X-Geom-height xgeom))
+            (setq y (- (X-Geom-height xgeom) height))))
+
+        (let* ((ximg (XImageGet (xwem-dpy) xwin x y width height))
+               (cv (nth 3 (XQueryColors (xwem-dpy) (XDefaultColormap 
(xwem-dpy))
+                                        (mapcan 'identity (X-Image-get-prop 
ximg 'px-layout)))))
+               (vv (/ (apply '+ (apply 'nconc cv)) (length cv))))
+
+          (XDestroyImage ximg)
+          (if (< vv xwem-background-mode-bound)
+              'dark 'light)))
+    ;; XXX maybe introduce `xwem-background-mode-default' ?
+    (t 'light)))
 
 ;;;###xwem-autoload
 (defun xwem-misc-completing-read-using-iswitchb


--- orig/lisp/xwem-netwm.el
+++ mod/lisp/xwem-netwm.el
@@ -365,11 +365,12 @@
                    XA-window X-format-32 X-PropModeReplace
                    (list (xwem-minib-xwin xwem-minibuffer)))
 
-  (XChangeProperty (xwem-dpy) (xwem-minib-xwin xwem-minibuffer)
-                   (XInternAtom (xwem-dpy) _NET_WM_NAME)
-                   (XInternAtom (xwem-dpy) UTF8_STRING)
-                   X-format-32 X-PropModeReplace
-                   (list xwem-version)))
+;  (XChangeProperty (xwem-dpy) (xwem-minib-xwin xwem-minibuffer)
+;                   (XInternAtom (xwem-dpy) _NET_WM_NAME)
+;                   (XInternAtom (xwem-dpy) UTF8_STRING)
+;                   X-format-32 X-PropModeReplace
+;                   (list xwem-version))
+  )
 
 (defun xwem-nwm-set-client-list (&rest notused)
   "Set _NET_CLIENT_LIST and _NET_CLIENT_LIST_STACKING."


--- orig/lisp/xwem-selections.el
+++ mod/lisp/xwem-selections.el
@@ -108,11 +108,22 @@
       )))
 
 ;;;###xwem-autoload
-(defun xwem-selection ()
-  "Return either active region or active PRIMARY selection."
-  (or (and (region-active-p)
-           (buffer-substring (region-beginning) (region-end)))
-      (ignore-errors (get-selection))))
+(defun xwem-selection (&optional type)
+  "Return text selection of given TYPE.
+TYPE is one of:
+  'local - Active Emacs region.
+  'x     - PRIMARY X selection.
+  'any   - Either active region or PRIMARY X selection.
+
+Default TYPE is 'local."
+  (unless type (setq type 'local))
+  (ecase type
+    (local (when (region-active-p)
+             (with-current-buffer (zmacs-region-buffer)
+               (buffer-substring (region-beginning) (region-end)))))
+    (x (ignore-errors (get-selection)))
+    (any (or (xwem-selection 'local)
+             (xwem-selection 'x)))))
 
 ;;;###autoload(autoload 'xwem-help-cutbuffers "xwem-selections" "Display help 
about cutbuffers." t)
 (define-xwem-command xwem-help-cutbuffers ()
@@ -148,8 +159,9 @@
 cutbuffer."
   (xwem-interactive "p")
 
-  (let ((sel (or (xwem-selection)
+  (let ((sel (or (xwem-selection 'any)
                  (x-get-cutbuffer which-one))))
+    (zmacs-deactivate-region)             ; XXX
     (if (not sel)
         (xwem-message 'note "No active selection")
       (push sel xwem-selections)


--- orig/lisp/xwem-tray.el
+++ mod/lisp/xwem-tray.el
@@ -811,7 +811,7 @@
                      (xwem-debug 'xwem-tray "Creating new dockapp ..")
                      (xwem-tray-new-dapp mes-win))
                     (t (xwem-message
-                        'warning "Unknown data-type %d in clientmessage."
+                        'warning "Unknown data-type %d in client message."
                         data-type))))
              (t (xwem-message 'warning "Unknown mes-type %d" mes-type)))))
 


--- orig/utils/xwem-osd.el
+++ mod/utils/xwem-osd.el
@@ -671,10 +671,9 @@
   (let ((xdpy (xwem-osd-instance-xdpy osin))
         (xgc (xwem-osd-instance-xgc osin))
         (font (xwem-osd-instance-get-prop osin :font)))
-    (setf (X-Gc-line-width xgc) (xwem-osd-instance-get-prop osin :line-width))
+    (XChangeGC xdpy xgc :line-width (xwem-osd-instance-get-prop osin 
:line-width))
     (when font
-      (setf (X-Gc-font xgc) (X-Font-get xdpy font)))
-    (XChangeGC xdpy xgc))
+      (XChangeGC xdpy xgc :font (X-Font-get xdpy font))))
 
   ;; And redraw whole OSD
   (xwem-osd-redraw (xwem-osd-instance-osd osin)))


--- orig/utils/xwem-worklog.el
+++ mod/utils/xwem-worklog.el
@@ -757,15 +757,14 @@
       (xwem-kbd-stop-grabbing)
       (xwem-kbd-start-grabbing xwem-worklog-pause-cursor)
 
-      (pushnew 'xwem-worklog-post-command
-               xwem-post-command-hook)
+      (pushnew 'xwem-worklog-post-command xwem-post-command-hook)
       (xwem-unwind-protect
           (while xwem-worklog-pause-p
             (setq xev (xwem-next-event 1))
             (if (not xev)
                 ;; Timeout
                 (let ((xwem-worklog-pause-window-update-hook
-                       'xwem-worklog-show-color-breaks))
+                       'xwem-worklog-show-color-bricks))
                   (xwem-worklog-pause-update))
 
               ;; Event arrived
@@ -787,9 +786,9 @@
 
   (let ((xwem-worklog-pause-window-update-hook
          (if xwem-worklog-use-diagram
-             (list 'xwem-worklog-show-color-breaks
+             (list 'xwem-worklog-show-color-bricks
                    'xwem-worklog-draw-today-diagram)
-           (list 'xwem-worklog-show-color-breaks))))
+           (list 'xwem-worklog-show-color-bricks))))
     (xwem-worklog-pause arg 'list)))
 
 (define-xwem-command xwem-worklog-continue (arg)
@@ -1309,8 +1308,8 @@
   `((t (:foreground "black")))
   "Temporary face used by worklog.")
 
-(defun xwem-worklog-show-color-breaks ()
-  "Show color breaks."
+(defun xwem-worklog-show-color-bricks ()
+  "Show color bricks."
   (when (eq (xwem-worklog-pause-type xwem-worklog-pause-p) 'list)
     ;; Do it only in listing
     (let* ((face-height (font-height (face-font 'default)))



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