X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d2fc7e3d0f6f57f962cbd94df3bf4fd15a37bb68..a9bc03e28e99ca44a7e009de25fa7084aec4c60c:/lisp/x-dnd.el?ds=sidebyside diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el index 1c6af1f45f..43e9f376d0 100644 --- a/lisp/x-dnd.el +++ b/lisp/x-dnd.el @@ -1,6 +1,6 @@ ;;; x-dnd.el --- drag and drop support for X -*- coding: utf-8 -*- -;; Copyright (C) 2004-2011 Free Software Foundation, Inc. +;; Copyright (C) 2004-2013 Free Software Foundation, Inc. ;; Author: Jan Djärv ;; Maintainer: FSF @@ -410,7 +410,7 @@ otherwise return the frame width/height." "Return the x/y coordinates to be sent in a XDndStatus message. Coordinates are required to be absolute. FRAME is the frame and W is the window where the drop happened. -If W is a window, return its absolute corrdinates, +If W is a window, return its absolute coordinates, otherwise return the frame coordinates." (let* ((frame-left (frame-parameter frame 'left)) ;; If the frame is outside the display, frame-left looks like @@ -431,7 +431,19 @@ otherwise return the frame coordinates." (declare-function x-send-client-message "xselect.c" (display dest from message-type format values)) (declare-function x-get-selection-internal "xselect.c" - (selection-symbol target-type &optional time-stamp)) + (selection-symbol target-type &optional time-stamp terminal)) + +(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. @@ -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