annotate lisp/x-dnd.el @ 110937:51080327d173

lisp/net/telnet.el: "Fix" commented code.
author Juanma Barranquero <lekktu@gmail.com>
date Tue, 12 Oct 2010 04:45:24 +0200
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