annotate lisp/x-dnd.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 280c8ae2476d
children de02b794c330
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109259
e76d2bc9dbbe * dnd.el, font-setting.el, x-dnd.el: Use utf-8 coding (for author name).
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
1 ;;; x-dnd.el --- drag and drop support for X -*- coding: utf-8 -*-
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
2
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105994
diff changeset
3 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
104823
68150c643e2e Use default-value rather than default-enable-multibyte-characters.
Glenn Morris <rgm@gnu.org>
parents: 102285
diff changeset
4 ;; Free Software Foundation, Inc.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
5
109259
e76d2bc9dbbe * dnd.el, font-setting.el, x-dnd.el: Use utf-8 coding (for author name).
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
6 ;; Author: Jan Djärv <jan.h.d@swipnet.se>
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
7 ;; Maintainer: FSF
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
8 ;; Keywords: window, drag, drop
110015
280c8ae2476d Add "Package:" file headers to denote built-in packages.
Chong Yidong <cyd@stupidchicken.com>
parents: 109259
diff changeset
9 ;; Package: emacs
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
10
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
12
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
14 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
15 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
16 ;; (at your option) any later version.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
17
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
18 ;; GNU Emacs is distributed in the hope that it will be useful,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
21 ;; GNU General Public License for more details.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
22
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
23 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
25
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
26 ;;; Commentary:
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
27
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
28 ;; This file provides the drop part only. Currently supported protocols
53949
7edbce1dd20a * x-dnd.el: Mention support for Motif in commentary.
Jan Djärv <jan.h.d@swipnet.se>
parents: 53913
diff changeset
29 ;; are XDND, Motif and the old KDE 1.x protocol.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
30
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
31 ;;; Code:
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
32
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
33 (require 'dnd)
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
34
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
35 ;;; Customizable variables
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
36 (defcustom x-dnd-test-function 'x-dnd-default-test-function
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
37 "The function drag and drop uses to determine if to accept or reject a drop.
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
38 The function takes three arguments, WINDOW, ACTION and TYPES.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
39 WINDOW is where the mouse is when the function is called. WINDOW may be a
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
40 frame if the mouse isn't over a real window (i.e. menu bar, tool bar or
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
41 scroll bar). ACTION is the suggested action from the drag and drop source,
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
42 one of the symbols move, copy, link or ask. TYPES is a list of available
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
43 types for the drop.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
44
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
45 The function shall return nil to reject the drop or a cons with two values,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
46 the wanted action as car and the wanted type as cdr. The wanted action
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
47 can be copy, move, link, ask or private.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
48 The default value for this variable is `x-dnd-default-test-function'."
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
49 :version "22.1"
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
50 :type 'symbol
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
51 :group 'x)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
52
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
53
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
54
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
55 (defcustom x-dnd-types-alist
105765
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
56 `(
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
57 (,(purecopy "text/uri-list") . x-dnd-handle-uri-list)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
58 (,(purecopy "text/x-moz-url") . x-dnd-handle-moz-url)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
59 (,(purecopy "_NETSCAPE_URL") . x-dnd-handle-uri-list)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
60 (,(purecopy "FILE_NAME") . x-dnd-handle-file-name)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
61 (,(purecopy "UTF8_STRING") . x-dnd-insert-utf8-text)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
62 (,(purecopy "text/plain;charset=UTF-8") . x-dnd-insert-utf8-text)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
63 (,(purecopy "text/plain;charset=utf-8") . x-dnd-insert-utf8-text)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
64 (,(purecopy "text/unicode") . x-dnd-insert-utf16-text)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
65 (,(purecopy "text/plain") . dnd-insert-text)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
66 (,(purecopy "COMPOUND_TEXT") . x-dnd-insert-ctext)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
67 (,(purecopy "STRING") . dnd-insert-text)
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
68 (,(purecopy "TEXT") . dnd-insert-text)
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
69 )
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
70 "Which function to call to handle a drop of that type.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
71 If the type for the drop is not present, or the function is nil,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
72 the drop is rejected. The function takes three arguments, WINDOW, ACTION
75140
6674b79afd5e (x-dnd-types-alist): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents: 72485
diff changeset
73 and DATA. WINDOW is where the drop occurred, ACTION is the action for
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
74 this drop (copy, move, link, private or ask) as determined by a previous
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
75 call to `x-dnd-test-function'. DATA is the drop data.
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
76 The function shall return the action used (copy, move, link or private)
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
77 if drop is successful, nil if not."
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
78 :version "22.1"
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
79 :type 'alist
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
80 :group 'x)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
81
56852
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
82 (defcustom x-dnd-known-types
105870
26baacb565b0 * textmodes/tex-mode.el (tex-alt-dvi-print-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105765
diff changeset
83 (mapcar 'purecopy
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
84 '("text/uri-list"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
85 "text/x-moz-url"
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
86 "_NETSCAPE_URL"
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
87 "FILE_NAME"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
88 "UTF8_STRING"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
89 "text/plain;charset=UTF-8"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
90 "text/plain;charset=utf-8"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
91 "text/unicode"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
92 "text/plain"
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
93 "COMPOUND_TEXT"
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
94 "STRING"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
95 "TEXT"
105870
26baacb565b0 * textmodes/tex-mode.el (tex-alt-dvi-print-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105765
diff changeset
96 ))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
97 "The types accepted by default for dropped data.
56852
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
98 The types are chosen in the order they appear in the list."
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
99 :version "22.1"
56852
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
100 :type '(repeat string)
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
101 :group 'x
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
102 )
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
103
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
104 ;; Internal variables
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
105
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
106 (defvar x-dnd-current-state nil
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
107 "The current state for a drop.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
108 This is an alist with one entry for each display. The value for each display
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
109 is a vector that contains the state for drag and drop for that display.
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
110 Elements in the vector are:
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
111 Last buffer drag was in,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
112 last window drag was in,
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
113 types available for drop,
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
114 the action suggested by the source,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
115 the type we want for the drop,
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
116 the action we want for the drop,
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
117 any protocol specific data.")
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
118
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
119 (defvar x-dnd-empty-state [nil nil nil nil nil nil nil])
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
120
86325
613267d53431 (x-register-dnd-atom, x-get-atom-name, x-send-client-message):
Juanma Barranquero <lekktu@gmail.com>
parents: 83648
diff changeset
121 (declare-function x-register-dnd-atom "xselect.c")
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
122
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
123 (defun x-dnd-init-frame (&optional frame)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
124 "Setup drag and drop for FRAME (i.e. create appropriate properties)."
83040
b0da1c792c48 Don't try to init X drag and drop on a termcap frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 53949
diff changeset
125 (when (eq 'x (window-system frame))
83541
694bbb62a75d Merged from emacs@sv.gnu.org
Karoly Lorentey <lorentey@elte.hu>
parents: 83527 72485
diff changeset
126 (x-register-dnd-atom "DndProtocol" frame)
694bbb62a75d Merged from emacs@sv.gnu.org
Karoly Lorentey <lorentey@elte.hu>
parents: 83527 72485
diff changeset
127 (x-register-dnd-atom "_MOTIF_DRAG_AND_DROP_MESSAGE" frame)
694bbb62a75d Merged from emacs@sv.gnu.org
Karoly Lorentey <lorentey@elte.hu>
parents: 83527 72485
diff changeset
128 (x-register-dnd-atom "XdndEnter" frame)
694bbb62a75d Merged from emacs@sv.gnu.org
Karoly Lorentey <lorentey@elte.hu>
parents: 83527 72485
diff changeset
129 (x-register-dnd-atom "XdndPosition" frame)
694bbb62a75d Merged from emacs@sv.gnu.org
Karoly Lorentey <lorentey@elte.hu>
parents: 83527 72485
diff changeset
130 (x-register-dnd-atom "XdndLeave" frame)
694bbb62a75d Merged from emacs@sv.gnu.org
Karoly Lorentey <lorentey@elte.hu>
parents: 83527 72485
diff changeset
131 (x-register-dnd-atom "XdndDrop" frame)
83040
b0da1c792c48 Don't try to init X drag and drop on a termcap frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 53949
diff changeset
132 (x-dnd-init-xdnd-for-frame frame)
b0da1c792c48 Don't try to init X drag and drop on a termcap frame.
Karoly Lorentey <lorentey@elte.hu>
parents: 53949
diff changeset
133 (x-dnd-init-motif-for-frame frame)))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
134
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
135 (defun x-dnd-get-state-cons-for-frame (frame-or-window)
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
136 "Return the entry in `x-dnd-current-state' for a frame or window."
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
137 (let* ((frame (if (framep frame-or-window) frame-or-window
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
138 (window-frame frame-or-window)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
139 (display (frame-parameter frame 'display)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
140 (if (not (assoc display x-dnd-current-state))
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
141 (push (cons display (copy-sequence x-dnd-empty-state))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
142 x-dnd-current-state))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
143 (assoc display x-dnd-current-state)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
144
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
145 (defun x-dnd-get-state-for-frame (frame-or-window)
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
146 "Return the state in `x-dnd-current-state' for a frame or window."
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
147 (cdr (x-dnd-get-state-cons-for-frame frame-or-window)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
148
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
149 (defun x-dnd-default-test-function (window action types)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
150 "The default test function for drag and drop.
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
151 WINDOW is where the mouse is when this function is called. It may be
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
152 a frame if the mouse is over the menu bar, scroll bar or tool bar.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
153 ACTION is the suggested action from the source, and TYPES are the
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
154 types the drop data can have. This function only accepts drops with
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
155 types in `x-dnd-known-types'. It always returns the action private."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
156 (let ((type (x-dnd-choose-type types)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
157 (when type (cons 'private type))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
158
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
159
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
160 (defun x-dnd-current-type (frame-or-window)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
161 "Return the type we want the DND data to be in for the current drop.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
162 FRAME-OR-WINDOW is the frame or window that the mouse is over."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
163 (aref (x-dnd-get-state-for-frame frame-or-window) 4))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
164
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
165 (defun x-dnd-forget-drop (frame-or-window)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
166 "Remove all state for the last drop.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
167 FRAME-OR-WINDOW is the frame or window that the mouse is over."
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
168 (setcdr (x-dnd-get-state-cons-for-frame frame-or-window)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
169 (copy-sequence x-dnd-empty-state)))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
170
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
171 (defun x-dnd-maybe-call-test-function (window action)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
172 "Call `x-dnd-test-function' if something has changed.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
173 WINDOW is the window the mouse is over. ACTION is the suggested
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
174 action from the source. If nothing has changed, return the last
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
175 action and type we got from `x-dnd-test-function'."
81390
fe478726dca2 (x-dnd-maybe-call-test-function, x-dnd-save-state, x-dnd-drop-data):
Juanma Barranquero <lekktu@gmail.com>
parents: 75347
diff changeset
176 (let ((buffer (when (window-live-p window)
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
177 (window-buffer window)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
178 (current-state (x-dnd-get-state-for-frame window)))
105994
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105870
diff changeset
179 (unless (and (equal buffer (aref current-state 0))
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105870
diff changeset
180 (equal window (aref current-state 1))
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105870
diff changeset
181 (equal action (aref current-state 3)))
009383a57ce8 * x-dnd.el (x-dnd-maybe-call-test-function):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 105870
diff changeset
182 (save-current-buffer
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
183 (when buffer (set-buffer buffer))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
184 (let* ((action-type (funcall x-dnd-test-function
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
185 window
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
186 action
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
187 (aref current-state 2)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
188 (handler (cdr (assoc (cdr action-type) x-dnd-types-alist))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
189 ;; Ignore action-type if we have no handler.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
190 (setq current-state
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
191 (x-dnd-save-state window
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
192 action
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
193 (when handler action-type)))))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
194 (let ((current-state (x-dnd-get-state-for-frame window)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
195 (cons (aref current-state 5)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
196 (aref current-state 4))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
197
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
198 (defun x-dnd-save-state (window action action-type &optional types extra-data)
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
199 "Save the state of the current drag and drop.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
200 WINDOW is the window the mouse is over. ACTION is the action suggested
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
201 by the source. ACTION-TYPE is the result of calling `x-dnd-test-function'.
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
202 If given, TYPES are the types for the drop data that the source supports.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
203 EXTRA-DATA is data needed for a specific protocol."
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
204 (let ((current-state (x-dnd-get-state-for-frame window)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
205 (aset current-state 5 (car action-type))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
206 (aset current-state 4 (cdr action-type))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
207 (aset current-state 3 action)
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
208 (when types (aset current-state 2 types))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
209 (when extra-data (aset current-state 6 extra-data))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
210 (aset current-state 1 window)
81390
fe478726dca2 (x-dnd-maybe-call-test-function, x-dnd-save-state, x-dnd-drop-data):
Juanma Barranquero <lekktu@gmail.com>
parents: 75347
diff changeset
211 (aset current-state 0 (and (window-live-p window) (window-buffer window)))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
212 (setcdr (x-dnd-get-state-cons-for-frame window) current-state)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
213
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
214
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
215 (defun x-dnd-handle-moz-url (window action data)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
216 "Handle one item of type text/x-moz-url.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
217 WINDOW is the window where the drop happened. ACTION is ignored.
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
218 DATA is the moz-url, which is formatted as two strings separated by \\r\\n.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
219 The first string is the URL, the second string is the title of that URL.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
220 DATA is encoded in utf-16. Decode the URL and call `x-dnd-handle-uri-list'."
54682
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
221 ;; Mozilla and applications based on it (Galeon for example) uses
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
222 ;; text/unicode, but it is impossible to tell if it is le or be. Use what
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
223 ;; the machine Emacs runs on use. This looses if dropping between machines
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
224 ;; with different endian, but it is the best we can do.
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
225 (let* ((coding (if (eq (byteorder) ?B) 'utf-16be 'utf-16le))
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
226 (string (decode-coding-string data coding))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
227 (strings (split-string string "[\r\n]" t))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
228 ;; Can one drop more than one moz-url ?? Assume not.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
229 (url (car strings))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
230 (title (car (cdr strings))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
231 (x-dnd-handle-uri-list window action url)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
232
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
233 (defun x-dnd-insert-utf8-text (window action text)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
234 "Decode the UTF-8 text and insert it at point.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
235 TEXT is the text as a string, WINDOW is the window where the drop happened."
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
236 (dnd-insert-text window action (decode-coding-string text 'utf-8)))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
237
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
238 (defun x-dnd-insert-utf16-text (window action text)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
239 "Decode the UTF-16 text and insert it at point.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
240 TEXT is the text as a string, WINDOW is the window where the drop happened."
54682
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
241 ;; See comment in x-dnd-handle-moz-url about coding.
bd0296e87c16 * x-dnd.el (x-dnd-handle-moz-url, x-dnd-insert-utf16-text): Use
Jan Djärv <jan.h.d@swipnet.se>
parents: 53949
diff changeset
242 (let ((coding (if (eq (byteorder) ?B) 'utf-16be 'utf-16le)))
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
243 (dnd-insert-text window action (decode-coding-string text coding))))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
244
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
245 (defun x-dnd-insert-ctext (window action text)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
246 "Decode the compound text and insert it at point.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
247 TEXT is the text as a string, WINDOW is the window where the drop happened."
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
248 (dnd-insert-text window action
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
249 (decode-coding-string text
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
250 'compound-text-with-extensions)))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
251
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
252 (defun x-dnd-handle-uri-list (window action string)
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
253 "Split an uri-list into separate URIs and call `dnd-handle-one-url'.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
254 WINDOW is the window where the drop happened.
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
255 STRING is the uri-list as a string. The URIs are separated by \\r\\n."
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
256 (let ((uri-list (split-string string "[\0\r\n]" t))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
257 retval)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
258 (dolist (bf uri-list)
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
259 ;; If one URL is handled, treat as if the whole drop succeeded.
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
260 (let ((did-action (dnd-handle-one-url window action bf)))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
261 (when did-action (setq retval did-action))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
262 retval))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
263
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
264 (defun x-dnd-handle-file-name (window action string)
70761
b1742b0066f2 (x-dnd-handle-file-name): Encode and escape file names
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
265 "Convert file names to URLs and call `dnd-handle-one-url'.
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
266 WINDOW is the window where the drop happened.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
267 STRING is the file names as a string, separated by nulls."
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
268 (let ((uri-list (split-string string "[\0\r\n]" t))
104823
68150c643e2e Use default-value rather than default-enable-multibyte-characters.
Glenn Morris <rgm@gnu.org>
parents: 102285
diff changeset
269 (coding (and (default-value 'enable-multibyte-characters)
70761
b1742b0066f2 (x-dnd-handle-file-name): Encode and escape file names
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
270 (or file-name-coding-system
b1742b0066f2 (x-dnd-handle-file-name): Encode and escape file names
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
271 default-file-name-coding-system)))
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
272 retval)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
273 (dolist (bf uri-list)
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
274 ;; If one URL is handled, treat as if the whole drop succeeded.
70761
b1742b0066f2 (x-dnd-handle-file-name): Encode and escape file names
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
275 (if coding (setq bf (encode-coding-string bf coding)))
b1742b0066f2 (x-dnd-handle-file-name): Encode and escape file names
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
276 (let* ((file-uri (concat "file://"
b1742b0066f2 (x-dnd-handle-file-name): Encode and escape file names
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
277 (mapconcat 'url-hexify-string
b1742b0066f2 (x-dnd-handle-file-name): Encode and escape file names
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
278 (split-string bf "/") "/")))
61476
c7f99496c6bb * x-dnd.el: Require dnd.
Jan Djärv <jan.h.d@swipnet.se>
parents: 59996
diff changeset
279 (did-action (dnd-handle-one-url window action file-uri)))
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
280 (when did-action (setq retval did-action))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
281 retval))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
282
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
283
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
284 (defun x-dnd-choose-type (types &optional known-types)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
285 "Choose which type we want to receive for the drop.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
286 TYPES are the types the source of the drop offers, a vector of type names
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
287 as strings or symbols. Select among the types in `x-dnd-known-types' or
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
288 KNOWN-TYPES if given, and return that type name.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
289 If no suitable type is found, return nil."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
290 (let* ((known-list (or known-types x-dnd-known-types))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
291 (first-known-type (car known-list))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
292 (types-array types)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
293 (found (when first-known-type
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
294 (catch 'done
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
295 (dotimes (i (length types-array))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
296 (let* ((type (aref types-array i))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
297 (typename (if (symbolp type)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
298 (symbol-name type) type)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
299 (when (equal first-known-type typename)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
300 (throw 'done first-known-type))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
301 nil))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
302
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
303 (if (and (not found) (cdr known-list))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
304 (x-dnd-choose-type types (cdr known-list))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
305 found)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
306
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
307 (defun x-dnd-drop-data (event frame window data type)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
308 "Drop one data item onto a frame.
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
309 EVENT is the client message for the drop, FRAME is the frame the drop
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
310 occurred on. WINDOW is the window of FRAME where the drop happened.
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
311 DATA is the data received from the source, and type is the type for DATA,
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
312 see `x-dnd-types-alist').
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
313
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
314 Returns the action used (move, copy, link, private) if drop was successful,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
315 nil if not."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
316 (let* ((type-info (assoc type x-dnd-types-alist))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
317 (handler (cdr type-info))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
318 (state (x-dnd-get-state-for-frame frame))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
319 (action (aref state 5))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
320 (w (posn-window (event-start event))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
321 (when handler
81390
fe478726dca2 (x-dnd-maybe-call-test-function, x-dnd-save-state, x-dnd-drop-data):
Juanma Barranquero <lekktu@gmail.com>
parents: 75347
diff changeset
322 (if (and (window-live-p w)
65836
c502b2c18f47 (x-dnd-drop-data): Check for dedicated windows.
Richard M. Stallman <rms@gnu.org>
parents: 65807
diff changeset
323 (not (window-minibuffer-p w))
c502b2c18f47 (x-dnd-drop-data): Check for dedicated windows.
Richard M. Stallman <rms@gnu.org>
parents: 65807
diff changeset
324 (not (window-dedicated-p w)))
c502b2c18f47 (x-dnd-drop-data): Check for dedicated windows.
Richard M. Stallman <rms@gnu.org>
parents: 65807
diff changeset
325 ;; If dropping in an ordinary window which we could use,
c502b2c18f47 (x-dnd-drop-data): Check for dedicated windows.
Richard M. Stallman <rms@gnu.org>
parents: 65807
diff changeset
326 ;; let dnd-open-file-other-window specify what to do.
65807
637dfc9b8d2e * x-dnd.el (x-dnd-drop-data): Don't set dnd-open-file-other-window
Jan Djärv <jan.h.d@swipnet.se>
parents: 64762
diff changeset
327 (progn
72485
030d7ce12631 * x-dnd.el (x-dnd-drop-data): Don't call goto-char if
Jan Djärv <jan.h.d@swipnet.se>
parents: 72356
diff changeset
328 (when (not mouse-yank-at-point)
030d7ce12631 * x-dnd.el (x-dnd-drop-data): Don't call goto-char if
Jan Djärv <jan.h.d@swipnet.se>
parents: 72356
diff changeset
329 (goto-char (posn-point (event-start event))))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
330 (funcall handler window action data))
65836
c502b2c18f47 (x-dnd-drop-data): Check for dedicated windows.
Richard M. Stallman <rms@gnu.org>
parents: 65807
diff changeset
331 ;; If we can't display the file here,
c502b2c18f47 (x-dnd-drop-data): Check for dedicated windows.
Richard M. Stallman <rms@gnu.org>
parents: 65807
diff changeset
332 ;; make a new window for it.
c502b2c18f47 (x-dnd-drop-data): Check for dedicated windows.
Richard M. Stallman <rms@gnu.org>
parents: 65807
diff changeset
333 (let ((dnd-open-file-other-window t))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
334 (select-frame frame)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
335 (funcall handler window action data))))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
336
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
337 (defun x-dnd-handle-drag-n-drop-event (event)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
338 "Receive drag and drop events (X client messages).
53949
7edbce1dd20a * x-dnd.el: Mention support for Motif in commentary.
Jan Djärv <jan.h.d@swipnet.se>
parents: 53913
diff changeset
339 Currently XDND, Motif and old KDE 1.x protocols are recognized."
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
340 (interactive "e")
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
341 (let* ((client-message (car (cdr (cdr event))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
342 (window (posn-window (event-start event)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
343 (message-atom (aref client-message 0))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
344 (frame (aref client-message 1))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
345 (format (aref client-message 2))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
346 (data (aref client-message 3)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
347
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
348 (cond ((equal "DndProtocol" message-atom) ; Old KDE 1.x.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
349 (x-dnd-handle-old-kde event frame window message-atom format data))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
350
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
351 ((equal "_MOTIF_DRAG_AND_DROP_MESSAGE" message-atom) ; Motif
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
352 (x-dnd-handle-motif event frame window message-atom format data))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
353
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
354 ((and (> (length message-atom) 4) ; XDND protocol.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
355 (equal "Xdnd" (substring message-atom 0 4)))
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
356 (x-dnd-handle-xdnd event frame window message-atom format data)))))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
357
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
358
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
359 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
360 ;;; Old KDE protocol. Only dropping of files.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
361
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
362 (declare-function x-window-property "xfns.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
363 (prop &optional frame type source delete-p vector-ret-p))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
364
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
365 (defun x-dnd-handle-old-kde (event frame window message format data)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
366 "Open the files in a KDE 1.x drop."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
367 (let ((values (x-window-property "DndSelection" frame nil 0 t)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
368 (x-dnd-handle-uri-list window 'private
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
369 (replace-regexp-in-string "\0$" "" values))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
370 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
371
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
372
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
373
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
374 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
375 ;;; XDND protocol.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
376
105765
db5e4a5897ec * textmodes/tex-mode.el (tex-dvi-view-command)
Dan Nicolaescu <dann@ics.uci.edu>
parents: 104823
diff changeset
377 (defconst x-dnd-xdnd-to-action
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
378 '(("XdndActionPrivate" . private)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
379 ("XdndActionCopy" . copy)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
380 ("XdndActionMove" . move)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
381 ("XdndActionLink" . link)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
382 ("XdndActionAsk" . ask))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
383 "Mapping from XDND action types to lisp symbols.")
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
384
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
385 (declare-function x-change-window-property "xfns.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
386 (prop value &optional frame type format outer-P))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
387
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
388 (defun x-dnd-init-xdnd-for-frame (frame)
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
389 "Set the XdndAware property for FRAME to indicate that we do XDND."
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
390 (x-change-window-property "XdndAware"
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
391 '(5) ;; The version of XDND we support.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
392 frame "ATOM" 32 t))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
393
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
394 (defun x-dnd-get-drop-width-height (frame w accept)
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
395 "Return the width/height to be sent in a XDndStatus message.
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
396 FRAME is the frame and W is the window where the drop happened.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
397 If ACCEPT is nil return 0 (empty rectangle),
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
398 otherwise if W is a window, return its width/height,
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
399 otherwise return the frame width/height."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
400 (if accept
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
401 (if (windowp w) ;; w is not a window if dropping on the menu bar,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
402 ;; scroll bar or tool bar.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
403 (let ((edges (window-inside-pixel-edges w)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
404 (cons
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
405 (- (nth 2 edges) (nth 0 edges)) ;; right - left
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
406 (- (nth 3 edges) (nth 1 edges)))) ;; bottom - top
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
407 (cons (frame-pixel-width frame)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
408 (frame-pixel-height frame)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
409 0))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
410
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
411 (defun x-dnd-get-drop-x-y (frame w)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
412 "Return the x/y coordinates to be sent in a XDndStatus message.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
413 Coordinates are required to be absolute.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
414 FRAME is the frame and W is the window where the drop happened.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
415 If W is a window, return its absolute corrdinates,
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
416 otherwise return the frame coordinates."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
417 (let* ((frame-left (frame-parameter frame 'left))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
418 ;; If the frame is outside the display, frame-left looks like
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
419 ;; '(0 -16). Extract the -16.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
420 (frame-real-left (if (consp frame-left) (car (cdr frame-left))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
421 frame-left))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
422 (frame-top (frame-parameter frame 'top))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
423 (frame-real-top (if (consp frame-top) (car (cdr frame-top))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
424 frame-top)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
425 (if (windowp w)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
426 (let ((edges (window-inside-pixel-edges w)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
427 (cons
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
428 (+ frame-real-left (nth 0 edges))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
429 (+ frame-real-top (nth 1 edges))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
430 (cons frame-real-left frame-real-top))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
431
95841
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
432 (declare-function x-get-atom-name "xselect.c" (value &optional frame))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
433 (declare-function x-send-client-message "xselect.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
434 (display dest from message-type format values))
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
435 (declare-function x-get-selection-internal "xselect.c"
b4e36ff621b3 Add some compiler declarations, for builds without X.
Glenn Morris <rgm@gnu.org>
parents: 94678
diff changeset
436 (selection-symbol target-type &optional time-stamp))
86325
613267d53431 (x-register-dnd-atom, x-get-atom-name, x-send-client-message):
Juanma Barranquero <lekktu@gmail.com>
parents: 83648
diff changeset
437
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
438 (defun x-dnd-handle-xdnd (event frame window message format data)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
439 "Receive one XDND event (client message) and send the appropriate reply.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
440 EVENT is the client message. FRAME is where the mouse is now.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
441 WINDOW is the window within FRAME where the mouse is now.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
442 FORMAT is 32 (not used). MESSAGE is the data part of an XClientMessageEvent."
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
443 (cond ((equal "XdndEnter" message)
59932
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
444 (let* ((flags (aref data 1))
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
445 (version (and (consp flags) (ash (car flags) -8)))
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
446 (more-than-3 (and (consp flags) (cdr flags)))
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
447 (dnd-source (aref data 0)))
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
448 (if version ;; If flags is bad, version will be nil.
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
449 (x-dnd-save-state
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
450 window nil nil
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
451 (if (> more-than-3 0)
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
452 (x-window-property "XdndTypeList"
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
453 frame "AnyPropertyType"
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
454 dnd-source nil t)
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
455 (vector (x-get-atom-name (aref data 2))
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
456 (x-get-atom-name (aref data 3))
c7c51386376c * x-dnd.el (x-dnd-handle-xdnd): Handle the case where the flags
Jan Djärv <jan.h.d@swipnet.se>
parents: 57811
diff changeset
457 (x-get-atom-name (aref data 4))))))))
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
458
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
459 ((equal "XdndPosition" message)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
460 (let* ((x (car (aref data 2)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
461 (y (cdr (aref data 2)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
462 (action (x-get-atom-name (aref data 4)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
463 (dnd-source (aref data 0))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
464 (dnd-time (aref data 3))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
465 (action-type (x-dnd-maybe-call-test-function
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
466 window
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
467 (cdr (assoc action x-dnd-xdnd-to-action))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
468 (reply-action (car (rassoc (car action-type)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
469 x-dnd-xdnd-to-action)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
470 (accept ;; 1 = accept, 0 = reject
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
471 (if (and reply-action action-type) 1 0))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
472 (list-to-send
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
473 (list (string-to-number
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
474 (frame-parameter frame 'outer-window-id))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
475 accept ;; 1 = Accept, 0 = reject.
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
476 (x-dnd-get-drop-x-y frame window)
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
477 (x-dnd-get-drop-width-height
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
478 frame window (eq accept 1))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
479 (or reply-action 0)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
480 )))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
481 (x-send-client-message
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
482 frame dnd-source frame "XdndStatus" 32 list-to-send)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
483 ))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
484
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
485 ((equal "XdndLeave" message)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
486 (x-dnd-forget-drop window))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
487
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
488 ((equal "XdndDrop" message)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
489 (if (windowp window) (select-window window))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
490 (let* ((dnd-source (aref data 0))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
491 (value (and (x-dnd-current-type window)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
492 (x-get-selection-internal
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
493 'XdndSelection
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
494 (intern (x-dnd-current-type window)))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
495 success action ret-action)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
496
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
497 (setq action (if value
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
498 (condition-case info
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
499 (x-dnd-drop-data event frame window value
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
500 (x-dnd-current-type window))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
501 (error
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
502 (message "Error: %s" info)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
503 nil))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
504
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
505 (setq success (if action 1 0))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
506 (setq ret-action
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
507 (if (eq success 1)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
508 (or (car (rassoc action x-dnd-xdnd-to-action))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
509 "XdndActionPrivate")
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
510 0))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
511
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
512 (x-send-client-message
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
513 frame dnd-source frame "XdndFinished" 32
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
514 (list (string-to-number (frame-parameter frame 'outer-window-id))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
515 success ;; 1 = Success, 0 = Error
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
516 (if success "XdndActionPrivate" 0)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
517 ))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
518 (x-dnd-forget-drop window)))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
519
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
520 (t (error "Unknown XDND message %s %s" message data))))
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
521
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
522 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
523 ;;; Motif protocol.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
524
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
525 (defun x-dnd-init-motif-for-frame (frame)
102285
ece8e00c3763 * x-dnd.el (x-dnd-test-function, x-dnd-get-state-cons-for-frame)
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
526 "Set _MOTIF_DRAG_RECEIVER_INFO for FRAME to indicate that we do Motif DND."
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
527 (x-change-window-property "_MOTIF_DRAG_RECEIVER_INFO"
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
528 (list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
529 (byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
530 0 ; The Motif DND version.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
531 5 ; We want drag dynamic.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
532 0 0 0 0 0 0 0
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
533 0 0 0 0 0 0) ; Property must be 16 bytes.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
534 frame "_MOTIF_DRAG_RECEIVER_INFO" 8 t))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
535
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
536 (defun x-dnd-get-motif-value (data offset size byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
537 (cond ((eq size 2)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
538 (if (eq byteorder ?l)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
539 (+ (ash (aref data (1+ offset)) 8)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
540 (aref data offset))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
541 (+ (ash (aref data offset) 8)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
542 (aref data (1+ offset)))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
543
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
544 ((eq size 4)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
545 (if (eq byteorder ?l)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
546 (cons (+ (ash (aref data (+ 3 offset)) 8)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
547 (aref data (+ 2 offset)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
548 (+ (ash (aref data (1+ offset)) 8)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
549 (aref data offset)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
550 (cons (+ (ash (aref data offset) 8)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
551 (aref data (1+ offset)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
552 (+ (ash (aref data (+ 2 offset)) 8)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
553 (aref data (+ 3 offset))))))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
554
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
555 (defun x-dnd-motif-value-to-list (value size byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
556 (let ((bytes (cond ((eq size 2)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
557 (list (logand (lsh value -8) ?\xff)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
558 (logand value ?\xff)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
559
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
560 ((eq size 4)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
561 (if (consp value)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
562 (list (logand (lsh (car value) -8) ?\xff)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
563 (logand (car value) ?\xff)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
564 (logand (lsh (cdr value) -8) ?\xff)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
565 (logand (cdr value) ?\xff))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
566 (list (logand (lsh value -24) ?\xff)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
567 (logand (lsh value -16) ?\xff)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
568 (logand (lsh value -8) ?\xff)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
569 (logand value ?\xff)))))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
570 (if (eq byteorder ?l)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
571 (reverse bytes)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
572 bytes)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
573
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
574
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
575 (defvar x-dnd-motif-message-types
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
576 '((0 . XmTOP_LEVEL_ENTER)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
577 (1 . XmTOP_LEVEL_LEAVE)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
578 (2 . XmDRAG_MOTION)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
579 (3 . XmDROP_SITE_ENTER)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
580 (4 . XmDROP_SITE_LEAVE)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
581 (5 . XmDROP_START)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
582 (6 . XmDROP_FINISH)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
583 (7 . XmDRAG_DROP_FINISH)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
584 (8 . XmOPERATION_CHANGED))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
585 "Mapping from numbers to Motif DND message types.")
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
586
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
587 (defvar x-dnd-motif-to-action
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
588 '((1 . move)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
589 (2 . copy)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
590 (3 . link) ; Both 3 and 4 has been seen as link.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
591 (4 . link)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
592 (2 . private)) ; Motif does not have private, so use copy for private.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
593 "Mapping from number to operation for Motif DND.")
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
594
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
595 (defun x-dnd-handle-motif (event frame window message-atom format data)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
596 (let* ((message-type (cdr (assoc (aref data 0) x-dnd-motif-message-types)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
597 (source-byteorder (aref data 1))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
598 (my-byteorder (byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
599 (source-flags (x-dnd-get-motif-value data 2 2 source-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
600 (source-action (cdr (assoc (logand ?\xF source-flags)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
601 x-dnd-motif-to-action))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
602
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
603 (cond ((eq message-type 'XmTOP_LEVEL_ENTER)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
604 (let* ((dnd-source (x-dnd-get-motif-value
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
605 data 8 4 source-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
606 (selection-atom (x-dnd-get-motif-value
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
607 data 12 4 source-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
608 (atom-name (x-get-atom-name selection-atom))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
609 (types (when atom-name
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
610 (x-get-selection-internal (intern atom-name)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
611 'TARGETS))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
612 (x-dnd-forget-drop frame)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
613 (when types (x-dnd-save-state window nil nil
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
614 types
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
615 dnd-source))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
616
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
617 ;; Can not forget drop here, LEAVE comes before DROP_START and
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
618 ;; we need the state in DROP_START.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
619 ((eq message-type 'XmTOP_LEVEL_LEAVE)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
620 nil)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
621
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
622 ((eq message-type 'XmDRAG_MOTION)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
623 (let* ((state (x-dnd-get-state-for-frame frame))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
624 (timestamp (x-dnd-motif-value-to-list
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
625 (x-dnd-get-motif-value data 4 4
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
626 source-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
627 4 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
628 (x (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
629 (x-dnd-get-motif-value data 8 2 source-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
630 2 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
631 (y (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
632 (x-dnd-get-motif-value data 10 2 source-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
633 2 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
634 (dnd-source (aref state 6))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
635 (first-move (not (aref state 3)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
636 (action-type (x-dnd-maybe-call-test-function
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
637 window
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
638 source-action))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
639 (reply-action (car (rassoc (car action-type)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
640 x-dnd-motif-to-action)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
641 (reply-flags
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
642 (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
643 (if reply-action
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
644 (+ reply-action
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
645 ?\x30 ; 30: valid drop site
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
646 ?\x700) ; 700: can do copy, move or link
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
647 ?\x30) ; 30: drop site, but noop.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
648 2 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
649 (reply (append
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
650 (list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
651 (+ ?\x80 ; 0x80 indicates a reply.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
652 (if first-move
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
653 3 ; First time, reply is SITE_ENTER.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
654 2)) ; Not first time, reply is DRAG_MOTION.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
655 my-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
656 reply-flags
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
657 timestamp
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
658 x
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
659 y)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
660 (x-send-client-message frame
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
661 dnd-source
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
662 frame
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
663 "_MOTIF_DRAG_AND_DROP_MESSAGE"
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
664 8
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
665 reply)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
666
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
667 ((eq message-type 'XmOPERATION_CHANGED)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
668 (let* ((state (x-dnd-get-state-for-frame frame))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
669 (timestamp (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
670 (x-dnd-get-motif-value data 4 4 source-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
671 4 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
672 (dnd-source (aref state 6))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
673 (action-type (x-dnd-maybe-call-test-function
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
674 window
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
675 source-action))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
676 (reply-action (car (rassoc (car action-type)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
677 x-dnd-motif-to-action)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
678 (reply-flags
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
679 (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
680 (if reply-action
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
681 (+ reply-action
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
682 ?\x30 ; 30: valid drop site
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
683 ?\x700) ; 700: can do copy, move or link
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
684 ?\x30) ; 30: drop site, but noop
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
685 2 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
686 (reply (append
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
687 (list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
688 (+ ?\x80 ; 0x80 indicates a reply.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
689 8) ; 8 is OPERATION_CHANGED
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
690 my-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
691 reply-flags
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
692 timestamp)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
693 (x-send-client-message frame
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
694 dnd-source
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
695 frame
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
696 "_MOTIF_DRAG_AND_DROP_MESSAGE"
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
697 8
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
698 reply)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
699
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
700 ((eq message-type 'XmDROP_START)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
701 (let* ((x (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
702 (x-dnd-get-motif-value data 8 2 source-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
703 2 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
704 (y (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
705 (x-dnd-get-motif-value data 10 2 source-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
706 2 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
707 (selection-atom (x-dnd-get-motif-value
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
708 data 12 4 source-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
709 (atom-name (x-get-atom-name selection-atom))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
710 (dnd-source (x-dnd-get-motif-value
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
711 data 16 4 source-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
712 (action-type (x-dnd-maybe-call-test-function
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
713 window
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
714 source-action))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
715 (reply-action (car (rassoc (car action-type)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
716 x-dnd-motif-to-action)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
717 (reply-flags
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
718 (x-dnd-motif-value-to-list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
719 (if reply-action
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
720 (+ reply-action
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
721 ?\x30 ; 30: valid drop site
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
722 ?\x700) ; 700: can do copy, move or link
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
723 (+ ?\x30 ; 30: drop site, but noop.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
724 ?\x200)) ; 200: drop cancel.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
725 2 my-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
726 (reply (append
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
727 (list
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
728 (+ ?\x80 ; 0x80 indicates a reply.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
729 5) ; DROP_START.
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
730 my-byteorder)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
731 reply-flags
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
732 x
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
733 y))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
734 (timestamp (x-dnd-get-motif-value
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
735 data 4 4 source-byteorder))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
736 action)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
737
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
738 (x-send-client-message frame
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
739 dnd-source
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
740 frame
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
741 "_MOTIF_DRAG_AND_DROP_MESSAGE"
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
742 8
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
743 reply)
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
744 (setq action
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
745 (when (and reply-action atom-name)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
746 (let* ((value (x-get-selection-internal
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
747 (intern atom-name)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
748 (intern (x-dnd-current-type window)))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
749 (when value
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
750 (condition-case info
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
751 (x-dnd-drop-data event frame window value
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
752 (x-dnd-current-type window))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
753 (error
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
754 (message "Error: %s" info)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
755 nil))))))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
756 (x-get-selection-internal
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
757 (intern atom-name)
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
758 (if action 'XmTRANSFER_SUCCESS 'XmTRANSFER_FAILURE)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
759 timestamp)
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
760 (x-dnd-forget-drop frame)))
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
761
56852
4504840779eb * x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents: 54986
diff changeset
762 (t (error "Unknown Motif DND message %s %s" message-atom data)))))
59996
aac0a33f5772 Change release version from 21.4 to 22.1 throughout.
Kim F. Storm <storm@cua.dk>
parents: 59932
diff changeset
763
53913
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
764
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
765 ;;;
e83b3b3941cf x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53823
diff changeset
766
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
767 (provide 'x-dnd)
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
768
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 87649
diff changeset
769 ;; arch-tag: b621fb7e-50da-4323-850b-5fc71ae64621
53789
7efe8089eadf * x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff changeset
770 ;;; x-dnd.el ends here