X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/c07bb40b73856e3c40daf1dc6007ea13e3870912..7103fd599b4eb1610e35721ee4ebe95cc32499b8:/lisp/x-dnd.el diff --git a/lisp/x-dnd.el b/lisp/x-dnd.el index a215faab85..2cee5710b4 100644 --- a/lisp/x-dnd.el +++ b/lisp/x-dnd.el @@ -1,6 +1,6 @@ ;;; x-dnd.el --- drag and drop support for X. -;; Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +;; Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Jan Dj,Ad(Brv ;; Maintainer: FSF @@ -8,10 +8,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,9 +19,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -117,18 +115,19 @@ any protocol specific data.") (defvar x-dnd-empty-state [nil nil nil nil nil nil nil]) - +(declare-function x-register-dnd-atom "xselect.c") (defun x-dnd-init-frame (&optional frame) "Setup drag and drop for FRAME (i.e. create appropriate properties)." - (x-register-dnd-atom "DndProtocol" frame) - (x-register-dnd-atom "_MOTIF_DRAG_AND_DROP_MESSAGE" frame) - (x-register-dnd-atom "XdndEnter" frame) - (x-register-dnd-atom "XdndPosition" frame) - (x-register-dnd-atom "XdndLeave" frame) - (x-register-dnd-atom "XdndDrop" frame) - (x-dnd-init-xdnd-for-frame frame) - (x-dnd-init-motif-for-frame frame)) + (when (eq 'x (window-system frame)) + (x-register-dnd-atom "DndProtocol" frame) + (x-register-dnd-atom "_MOTIF_DRAG_AND_DROP_MESSAGE" frame) + (x-register-dnd-atom "XdndEnter" frame) + (x-register-dnd-atom "XdndPosition" frame) + (x-register-dnd-atom "XdndLeave" frame) + (x-register-dnd-atom "XdndDrop" frame) + (x-dnd-init-xdnd-for-frame frame) + (x-dnd-init-motif-for-frame frame))) (defun x-dnd-get-state-cons-for-frame (frame-or-window) "Return the entry in x-dnd-current-state for a frame or window." @@ -357,6 +356,9 @@ Currently XDND, Motif and old KDE 1.x protocols are recognized." ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Old KDE protocol. Only dropping of files. +(declare-function x-window-property "xfns.c" + (prop &optional frame type source delete-p vector-ret-p)) + (defun x-dnd-handle-old-kde (event frame window message format data) "Open the files in a KDE 1.x drop." (let ((values (x-window-property "DndSelection" frame nil 0 t))) @@ -377,6 +379,9 @@ Currently XDND, Motif and old KDE 1.x protocols are recognized." ("XdndActionAsk" . ask)) "Mapping from XDND action types to lisp symbols.") +(declare-function x-change-window-property "xfns.c" + (prop value &optional frame type format outer-P)) + (defun x-dnd-init-xdnd-for-frame (frame) "Set the XdndAware property for FRAME to indicate that we do XDND." (x-change-window-property "XdndAware" @@ -421,6 +426,12 @@ otherwise return the frame coordinates." (+ frame-real-top (nth 1 edges)))) (cons frame-real-left frame-real-top)))) +(declare-function x-get-atom-name "xselect.c" (value &optional frame)) +(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)) + (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. @@ -752,5 +763,5 @@ FORMAT is 32 (not used). MESSAGE is the data part of an XClientMessageEvent." (provide 'x-dnd) -;;; arch-tag: b621fb7e-50da-4323-850b-5fc71ae64621 +;; arch-tag: b621fb7e-50da-4323-850b-5fc71ae64621 ;;; x-dnd.el ends here