From: Jan Djärv Date: Mon, 20 Jun 2011 20:49:12 +0000 (+0200) Subject: * x-dnd.el (x-dnd-version-from-flags) X-Git-Tag: emacs-pretest-24.0.90~104^2~500 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ca5307394f6861fc825434c268e0a44adf8a3252;p=emacs.git * x-dnd.el (x-dnd-version-from-flags) (x-dnd-more-than-3-from-flags): New functions that handle long-as-cons and long as number. (x-dnd-handle-xdnd): Call functions above. Fixes: debbugs:8899 --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ceab0a14fcf..76339320b83 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,10 @@ +2011-06-20 Jan Djärv + + * x-dnd.el (x-dnd-version-from-flags) + (x-dnd-more-than-3-from-flags): New functions that handle long-as-cons + and long as number (Bug#8899). + (x-dnd-handle-xdnd): Call functions above (Bug#8899). + 2011-06-20 Stefan Monnier * minibuffer.el (completion-metadata): Prepend the alist with `metadata'. diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el index 1c6af1f45f2..04b759a8116 100644 --- a/lisp/x-dnd.el +++ b/lisp/x-dnd.el @@ -433,6 +433,18 @@ otherwise return the frame coordinates." (declare-function x-get-selection-internal "xselect.c" (selection-symbol target-type &optional time-stamp)) +(defun x-dnd-version-from-flags (flags) + "Return the version byte from the 32 bit FLAGS in an XDndEnter message" + (if (consp flags) ;; Long as cons + (ash (car flags) -8) + (ash flags -24))) ;; Ordinary number + +(defun x-dnd-more-than-3-from-flags (flags) + "Return the nmore-than3 bit from the 32 bit FLAGS in an XDndEnter message" + (if (consp flags) + (logand (cdr flags) 1) + (logand flags 1))) + (defun x-dnd-handle-xdnd (event frame window message _format data) "Receive one XDND event (client message) and send the appropriate reply. EVENT is the client message. FRAME is where the mouse is now. @@ -440,9 +452,10 @@ WINDOW is the window within FRAME where the mouse is now. FORMAT is 32 (not used). MESSAGE is the data part of an XClientMessageEvent." (cond ((equal "XdndEnter" message) (let* ((flags (aref data 1)) - (version (and (consp flags) (ash (car flags) -8))) - (more-than-3 (and (consp flags) (cdr flags))) + (version (x-dnd-version-from-flags flags)) + (more-than-3 (x-dnd-more-than-3-from-flags flags)) (dnd-source (aref data 0))) + (message "%s %s" version more-than-3) (if version ;; If flags is bad, version will be nil. (x-dnd-save-state window nil nil