Mercurial > emacs
annotate lisp/x-dnd.el @ 58195:c12b583f54b9
Fixed these problems:
** Clicking on partially visible lines fails
From: David Kastrup <dak@gnu.org>
Date: 27 Apr 2004 16:42:58 +0200
I had gnus display a mouse-highlighted line (a URL from browse-url)
partially at the bottom of its window. If I click with middle mouse
key on it, the window gets recentered while I hold the mouse key
pressed. If I release it, the window returns into its old position
(cursor in top row) and nothing happens, presumably because the click
was not registered on the line itself, but on the magically
recentered version.
That is a nuisance. Recentering of even partially visible click
targets should only happen if window-point moves there, but not at
the time of the click. From the moment I hold down a key until it
gets released, the displayed window portion should not change, with
the sole exception of scrolling when dragging at the edge of the
screen.
(progn
(setq line-spacing 4)
(dotimes (i (window-height))
(insert "\n" (int-to-string i)))
(forward-line -2)
(recenter -1))
** Can't drag modeline when mouse-autoselect-window is set
From: Klaus Zeitler <kzeitler@lucent.com>
Date: Mon, 11 Oct 2004 11:14:49 +0200
1. start emacs -q --no-site-file
2. set variable mouse-autoselect-window to t
3. split-window-vertically
now I can drag the modeline only upwards but not downwards
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sat, 13 Nov 2004 01:40:36 +0000 |
parents | 61662d4f85c7 |
children | c7c51386376c 7a0245dd1848 e24e2e78deda |
rev | line source |
---|---|
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
1 ;;; x-dnd.el --- drag and drop support for X. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
2 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
3 ;; Copyright (C) 2004 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
4 ;; Free Software Foundation, Inc. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
5 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
6 ;; Author: Jan Dj,Ad(Brv <jan.h.d@swipnet.se> |
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 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
9 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
10 ;; 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
|
11 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
12 ;; GNU Emacs is free software; you can redistribute it and/or modify |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
13 ;; it under the terms of the GNU General Public License as published by |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
14 ;; the Free Software Foundation; either version 2, or (at your option) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
15 ;; any later version. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
16 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
17 ;; 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
|
18 ;; 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
|
19 ;; 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
|
20 ;; 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
|
21 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
22 ;; You should have received a copy of the GNU General Public License |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
25 ;; Boston, MA 02111-1307, USA. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
26 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
27 ;;; Commentary: |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
28 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
29 ;; 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
|
30 ;; 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
|
31 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
32 ;;; Code: |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
33 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
34 ;;; Customizable variables |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
35 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
36 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
37 (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
|
38 "The function drag and drop uses to determine if to accept or reject a drop. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
39 The function takes three arguments, WINDOW ACTION and TYPES. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
40 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
|
41 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
|
42 scroll bar). ACTION is the suggested action from the drag and drop source, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
43 one of the symbols move, copy link or ask. TYPES is a list of available types |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
44 for the drop. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
45 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
46 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
|
47 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
|
48 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
|
49 The default value for this variable is `x-dnd-default-test-function'." |
57811
61662d4f85c7
* x-dnd.el (x-dnd-test-function, x-dnd-protocol-alist)
Jan Djärv <jan.h.d@swipnet.se>
parents:
56852
diff
changeset
|
50 :version "21.4" |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
51 :type 'symbol |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
52 :group 'x) |
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 (defcustom x-dnd-protocol-alist |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
55 '( |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
56 ("^file:///" . x-dnd-open-local-file) ; XDND format. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
57 ("^file://" . x-dnd-open-file) ; URL with host |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
58 ("^file:" . x-dnd-open-local-file) ; Old KDE, Motif, Sun |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
59 ) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
60 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
61 "The functions to call for different protocols when a drop is made. |
56852
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
62 This variable is used by `x-dnd-handle-uri-list', `x-dnd-handle-file-name' |
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
63 and `x-dnd-handle-moz-url'. The list contains of (REGEXP . FUNCTION) pairs. |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
64 The functions shall take two arguments, URL, which is the URL dropped and |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
65 ACTION which is the action to be performed for the drop (move, copy, link, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
66 private or ask). |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
67 If no match is found here, and the value of `browse-url-browser-function' |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
68 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
69 Insertion of text is not handeled by these functions, see `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
|
70 for that. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
71 The function shall return the action done (move, copy, link or private) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
72 if some action was made, or nil if the URL is ignored." |
57811
61662d4f85c7
* x-dnd.el (x-dnd-test-function, x-dnd-protocol-alist)
Jan Djärv <jan.h.d@swipnet.se>
parents:
56852
diff
changeset
|
73 :version "21.4" |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
74 :type 'alist |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
75 :group 'x) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
76 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
77 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
78 (defcustom 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
|
79 '( |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
80 ("text/uri-list" . x-dnd-handle-uri-list) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
81 ("text/x-moz-url" . x-dnd-handle-moz-url) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
82 ("_NETSCAPE_URL" . x-dnd-handle-uri-list) |
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
|
83 ("FILE_NAME" . x-dnd-handle-file-name) |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
84 ("UTF8_STRING" . x-dnd-insert-utf8-text) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
85 ("text/plain;charset=UTF-8" . x-dnd-insert-utf8-text) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
86 ("text/plain;charset=utf-8" . x-dnd-insert-utf8-text) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
87 ("text/unicode" . x-dnd-insert-utf16-text) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
88 ("text/plain" . x-dnd-insert-text) |
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
|
89 ("COMPOUND_TEXT" . x-dnd-insert-ctext) |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
90 ("STRING" . x-dnd-insert-text) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
91 ("TEXT" . x-dnd-insert-text) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
92 ) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
93 "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
|
94 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
|
95 the drop is rejected. The function takes three arguments, WINDOW, ACTION |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
96 and DATA. WINDOW is where the drop occured, ACTION is the action for |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
97 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
|
98 call to `x-dnd-test-function'. DATA is the drop data. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
99 The function shall return the action used (copy, move, link or private) if drop |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
100 is successful, nil if not." |
57811
61662d4f85c7
* x-dnd.el (x-dnd-test-function, x-dnd-protocol-alist)
Jan Djärv <jan.h.d@swipnet.se>
parents:
56852
diff
changeset
|
101 :version "21.4" |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
102 :type 'alist |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
103 :group 'x) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
104 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
105 (defcustom x-dnd-open-file-other-window nil |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
106 "If non-nil, always use find-file-other-window to open dropped files." |
57811
61662d4f85c7
* x-dnd.el (x-dnd-test-function, x-dnd-protocol-alist)
Jan Djärv <jan.h.d@swipnet.se>
parents:
56852
diff
changeset
|
107 :version "21.4" |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
108 :type 'boolean |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
109 :group 'x) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
110 |
56852
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
111 (defcustom x-dnd-known-types |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
112 '("text/uri-list" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
113 "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
|
114 "_NETSCAPE_URL" |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
115 "FILE_NAME" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
116 "UTF8_STRING" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
117 "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
|
118 "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
|
119 "text/unicode" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
120 "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
|
121 "COMPOUND_TEXT" |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
122 "STRING" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
123 "TEXT" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
124 ) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
125 "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
|
126 The types are chosen in the order they appear in the list." |
57811
61662d4f85c7
* x-dnd.el (x-dnd-test-function, x-dnd-protocol-alist)
Jan Djärv <jan.h.d@swipnet.se>
parents:
56852
diff
changeset
|
127 :version "21.4" |
56852
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
128 :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
|
129 :group 'x |
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
130 ) |
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
131 |
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
132 ;; Internal variables |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
133 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
134 (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
|
135 "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
|
136 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
|
137 is a vector that contains the state for drag and drop for that display. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
138 Elements in the vector are: |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
139 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
|
140 last window drag was in, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
141 types available for drop, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
142 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
|
143 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
|
144 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
|
145 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
|
146 |
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
|
147 (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
|
148 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
149 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
150 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
151 (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
|
152 "Setup drag and drop for FRAME (i.e. create appropriate properties)." |
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
|
153 (x-dnd-init-xdnd-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
|
154 (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
|
155 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
156 (defun 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
|
157 "Return the entry in x-dnd-current-state for a frame or window." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
158 (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
|
159 (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
|
160 (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
|
161 (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
|
162 (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
|
163 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
|
164 (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
|
165 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
166 (defun x-dnd-get-state-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
|
167 "Return the state in x-dnd-current-state for a frame or window." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
168 (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
|
169 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
170 (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
|
171 "The default test function for drag and drop. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
172 WINDOW is where the mouse is when this function is called. It may be a frame |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
173 if the mouse is over the menu bar, 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
|
174 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
|
175 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
|
176 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
|
177 (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
|
178 (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
|
179 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
180 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
181 (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
|
182 "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
|
183 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
|
184 (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
|
185 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
186 (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
|
187 "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
|
188 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
|
189 (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
|
190 (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
|
191 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
192 (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
|
193 "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
|
194 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
|
195 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
|
196 action and type we got from `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
|
197 (let ((buffer (when (and (windowp window) (window-live-p window)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
198 (window-buffer window))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
199 (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
|
200 (when (or (not (equal buffer (aref current-state 0))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
201 (not (equal window (aref current-state 1))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
202 (not (equal action (aref current-state 3)))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
203 (save-excursion |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
204 (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
|
205 (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
|
206 window |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
207 action |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
208 (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
|
209 (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
|
210 ;; 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
|
211 (setq current-state |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
212 (x-dnd-save-state window |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
213 action |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
214 (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
|
215 (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
|
216 (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
|
217 (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
|
218 |
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
|
219 (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
|
220 "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
|
221 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
|
222 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
|
223 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
|
224 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
|
225 (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
|
226 (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
|
227 (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
|
228 (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
|
229 (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
|
230 (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
|
231 (aset current-state 1 window) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
232 (aset current-state 0 (if (and (windowp window) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
233 (window-live-p window)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
234 (window-buffer window) nil)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
235 (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
|
236 |
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-handle-one-url (window action arg) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
239 "Handle one dropped url by calling the appropriate handler. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
240 The handler is first localted by looking at `x-dnd-protocol-alist'. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
241 If no match is found here, and the value of `browse-url-browser-function' |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
242 is a pair of (REGEXP . FUNCTION), those regexps are tried for a match. |
53790 | 243 If no match is found, just call `x-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
|
244 WINDOW is where the drop happend, ACTION is the action for the drop, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
245 ARG is the URL that has been dropped. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
246 Returns ACTION." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
247 (require 'browse-url) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
248 (let* ((uri (replace-regexp-in-string |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
249 "%[A-Z0-9][A-Z0-9]" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
250 (lambda (arg) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
251 (format "%c" (string-to-number (substring arg 1) 16))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
252 arg)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
253 ret) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
254 (or |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
255 (catch 'done |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
256 (dolist (bf x-dnd-protocol-alist) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
257 (when (string-match (car bf) uri) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
258 (setq ret (funcall (cdr bf) uri action)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
259 (throw 'done t))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
260 nil) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
261 (when (not (functionp browse-url-browser-function)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
262 (catch 'done |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
263 (dolist (bf browse-url-browser-function) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
264 (when (string-match (car bf) uri) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
265 (setq ret 'private) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
266 (funcall (cdr bf) uri action) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
267 (throw 'done t))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
268 nil)) |
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
|
269 (progn |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
270 (x-dnd-insert-text window action uri) |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
271 (setq ret 'private))) |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
272 ret)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
273 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
274 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
275 (defun x-dnd-get-local-file-uri (uri) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
276 "Return an uri converted to file:/// syntax if uri is a local file. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
277 Return nil if URI is not a local file." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
278 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
279 ;; The hostname may be our hostname, in that case, convert to a local |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
280 ;; file. Otherwise return nil. TODO: How about an IP-address as hostname? |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
281 (let ((hostname (when (string-match "^file://\\([^/]*\\)" uri) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
282 (downcase (match-string 1 uri)))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
283 (system-name-no-dot |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
284 (downcase (if (string-match "^[^\\.]+" system-name) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
285 (match-string 0 system-name) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
286 system-name)))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
287 (when (and hostname |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
288 (or (string-equal "localhost" hostname) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
289 (string-equal (downcase system-name) hostname) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
290 (string-equal system-name-no-dot hostname))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
291 (concat "file://" (substring uri (+ 7 (length hostname))))))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
292 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
293 (defun x-dnd-get-local-file-name (uri &optional must-exist) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
294 "Return file name converted from file:/// or file: syntax. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
295 URI is the uri for the file. If MUST-EXIST is given and non-nil, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
296 only return non-nil if the file exists. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
297 Return nil if URI is not a local file." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
298 (let ((f (cond ((string-match "^file:///" uri) ; XDND format. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
299 (substring uri (1- (match-end 0)))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
300 ((string-match "^file:" uri) ; Old KDE, Motif, Sun |
53823
cc4faf95fea2
* x-dnd.el (x-dnd-get-local-file-name): Fix byte compiler warning
Jan Djärv <jan.h.d@swipnet.se>
parents:
53797
diff
changeset
|
301 (substring uri (match-end 0)))))) |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
302 (when (and f must-exist) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
303 (let* ((decoded-f (decode-coding-string |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
304 f |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
305 (or file-name-coding-system |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
306 default-file-name-coding-system))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
307 (try-f (if (file-readable-p decoded-f) decoded-f f))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
308 (when (file-readable-p try-f) try-f))))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
309 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
310 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
311 (defun x-dnd-open-local-file (uri action) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
312 "Open a local file. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
313 The file is opened in the current window, or a new window if |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
314 `x-dnd-open-file-other-window' is set. URI is the url for the file, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
315 and must have the format file:file-name or file:///file-name. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
316 The last / in file:/// is part of the file name. ACTION is ignored." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
317 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
318 (let* ((f (x-dnd-get-local-file-name uri t))) |
54986
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
319 (if (and f (file-readable-p f)) |
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
320 (progn |
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
321 (if x-dnd-open-file-other-window |
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
322 (find-file-other-window f) |
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
323 (find-file f)) |
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
324 'private) |
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
325 (error "Can not read %s" uri)))) |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
326 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
327 (defun x-dnd-open-file (uri action) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
328 "Open a local or remote file. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
329 The file is opened in the current window, or a new window if |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
330 `x-dnd-open-file-other-window' is set. URI is the url for the file, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
331 and must have the format file://hostname/file-name. ACTION is ignored. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
332 The last / in file://hostname/ is part of the file name." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
333 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
334 ;; The hostname may be our hostname, in that case, convert to a local |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
335 ;; file. Otherwise return nil. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
336 (let ((local-file (x-dnd-get-local-file-uri uri))) |
54986
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
337 (if local-file (x-dnd-open-local-file local-file action) |
82f3f56ffbf1
* x-dnd.el (x-dnd-open-local-file, x-dnd-open-file): Improved error
Jan Djärv <jan.h.d@swipnet.se>
parents:
54682
diff
changeset
|
338 (error "Remote files not supported")))) |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
339 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
340 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
341 (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
|
342 "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
|
343 WINDOW is the window where the drop happened. ACTION is ignored. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
344 DATA is the moz-url, which is formatted as two strings separated by \r\n. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
345 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
|
346 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
|
347 ;; 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
|
348 ;; 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
|
349 ;; 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
|
350 ;; 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
|
351 (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
|
352 (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
|
353 (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
|
354 ;; 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
|
355 (url (car strings)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
356 (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
|
357 (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
|
358 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
359 (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
|
360 "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
|
361 TEXT is the text as a string, WINDOW 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
|
362 (x-dnd-insert-text window action (decode-coding-string text 'utf-8))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
363 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
364 (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
|
365 "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
|
366 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
|
367 ;; 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
|
368 (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
|
369 (x-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
|
370 |
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
|
371 (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
|
372 "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
|
373 TEXT is the text as a string, 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
|
374 (x-dnd-insert-text window 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
|
375 (decode-coding-string 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
|
376 'compound-text-with-extensions))) |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
377 |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
378 (defun x-dnd-insert-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
|
379 "Insert text at point or push to the kill ring if buffer is read only. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
380 TEXT is the text as a string, WINDOW 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
|
381 (if (or buffer-read-only |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
382 (not (windowp window))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
383 (progn |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
384 (kill-new text) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
385 (message |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
386 (substitute-command-keys |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
387 "The dropped text can be accessed with \\[yank]"))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
388 (insert text)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
389 action) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
390 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
391 (defun x-dnd-handle-uri-list (window action string) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
392 "Split an uri-list into separate URIs and call `x-dnd-handle-one-url'. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
393 WINDOW 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
|
394 STRING is the uri-list as a string. The URIs are separated by \r\n." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
395 (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
|
396 retval) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
397 (dolist (bf uri-list) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
398 ;; If one URL is handeled, treat as if the whole drop succeeded. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
399 (let ((did-action (x-dnd-handle-one-url window action bf))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
400 (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
|
401 retval)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
402 |
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
|
403 (defun x-dnd-handle-file-name (window action string) |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
404 "Prepend file:// to file names and call `x-dnd-handle-one-url'. |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
405 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
|
406 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
|
407 (let ((uri-list (split-string string "[\0\r\n]" 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
|
408 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
|
409 (dolist (bf uri-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
|
410 ;; If one URL is handeled, treat as if the whole drop succeeded. |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
411 (let* ((file-uri (concat "file://" bf)) |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
412 (did-action (x-dnd-handle-one-url window action file-uri))) |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
413 (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
|
414 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
|
415 |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
416 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
417 (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
|
418 "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
|
419 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
|
420 as strings or symbols. Select among the types in `x-dnd-known-types' or |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
421 KNOWN-TYPES if given, and return that type name. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
422 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
|
423 (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
|
424 (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
|
425 (types-array types) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
426 (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
|
427 (catch 'done |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
428 (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
|
429 (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
|
430 (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
|
431 (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
|
432 (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
|
433 (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
|
434 nil)))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
435 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
436 (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
|
437 (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
|
438 found))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
439 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
440 (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
|
441 "Drop one data item onto a frame. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
442 EVENT is the client message for the drop, FRAME is the frame the drop occurred |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
443 on. WINDOW is the window of FRAME where the drop happened. DATA is the data |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
444 received from the source, and type is the type for DATA, see |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
445 `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
|
446 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
447 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
|
448 nil if not." |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
449 (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
|
450 (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
|
451 (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
|
452 (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
|
453 (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
|
454 (when handler |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
455 (if (and (windowp w) (window-live-p w)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
456 ;; If dropping in a window, open files in that window rather |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
457 ;; than in a new widow. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
458 (let ((x-dnd-open-file-other-window nil)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
459 (goto-char (posn-point (event-start event))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
460 (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
|
461 (let ((x-dnd-open-file-other-window t)) ;; Dropping on non-window. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
462 (select-frame frame) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
463 (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
|
464 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
465 (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
|
466 "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
|
467 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
|
468 (interactive "e") |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
469 (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
|
470 (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
|
471 (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
|
472 (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
|
473 (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
|
474 (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
|
475 |
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
|
476 (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
|
477 (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
|
478 |
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
|
479 ((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
|
480 (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
|
481 |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
482 ((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
|
483 (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
|
484 (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
|
485 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
486 |
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 ;;; 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
|
489 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
490 (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
|
491 "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
|
492 (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
|
493 (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
|
494 (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
|
495 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
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 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
498 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
499 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
500 ;;; XDND protocol. |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
501 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
502 (defvar 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
|
503 '(("XdndActionPrivate" . private) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
504 ("XdndActionCopy" . copy) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
505 ("XdndActionMove" . move) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
506 ("XdndActionLink" . link) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
507 ("XdndActionAsk" . ask)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
508 "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
|
509 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
510 (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
|
511 "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
|
512 (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
|
513 '(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
|
514 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
|
515 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
516 (defun x-dnd-get-drop-width-height (frame w accept) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
517 "Return the widht/height 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
|
518 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
|
519 If ACCEPT is nil return 0 (empty rectangle), |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
520 otherwise if W is a window, return its widht/height, |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
521 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
|
522 (if accept |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
523 (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
|
524 ;; 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
|
525 (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
|
526 (cons |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
527 (- (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
|
528 (- (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
|
529 (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
|
530 (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
|
531 0)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
532 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
533 (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
|
534 "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
|
535 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
|
536 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
|
537 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
|
538 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
|
539 (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
|
540 ;; 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
|
541 ;; '(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
|
542 (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
|
543 frame-left)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
544 (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
|
545 (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
|
546 frame-top))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
547 (if (windowp w) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
548 (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
|
549 (cons |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
550 (+ 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
|
551 (+ 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
|
552 (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
|
553 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
554 (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
|
555 "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
|
556 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
|
557 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
|
558 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
|
559 (cond ((equal "XdndEnter" message) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
560 (let ((version (ash (car (aref data 1)) -8)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
561 (more-than-3 (cdr (aref data 1))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
562 (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
|
563 (x-dnd-save-state |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
564 window nil nil |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
565 (if (> more-than-3 0) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
566 (x-window-property "XdndTypeList" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
567 frame "AnyPropertyType" |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
568 dnd-source nil t) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
569 (vector (x-get-atom-name (aref data 2)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
570 (x-get-atom-name (aref data 3)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
571 (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
|
572 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
573 ((equal "XdndPosition" message) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
574 (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
|
575 (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
|
576 (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
|
577 (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
|
578 (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
|
579 (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
|
580 window |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
581 (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
|
582 (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
|
583 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
|
584 (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
|
585 (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
|
586 (list-to-send |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
587 (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
|
588 (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
|
589 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
|
590 (x-dnd-get-drop-x-y frame window) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
591 (x-dnd-get-drop-width-height |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
592 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
|
593 (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
|
594 ))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
595 (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
|
596 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
|
597 )) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
598 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
599 ((equal "XdndLeave" message) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
600 (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
|
601 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
602 ((equal "XdndDrop" message) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
603 (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
|
604 (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
|
605 (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
|
606 (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
|
607 'XdndSelection |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
608 (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
|
609 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
|
610 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
611 (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
|
612 (condition-case info |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
613 (x-dnd-drop-data event frame window value |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
614 (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
|
615 (error |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
616 (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
|
617 nil)))) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
618 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
619 (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
|
620 (setq ret-action |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
621 (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
|
622 (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
|
623 "XdndActionPrivate") |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
624 0)) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
625 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
626 (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
|
627 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
|
628 (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
|
629 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
|
630 (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
|
631 )) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
632 (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
|
633 |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
634 (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
|
635 |
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
|
636 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
e83b3b3941cf
x-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 ;;; 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
|
638 |
e83b3b3941cf
x-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 (defun x-dnd-init-motif-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
|
640 "Set _MOTIF_DRAG_RECEIVER_INFO for FRAME to indicate that we do 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
|
641 (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
|
642 (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 (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
|
644 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
|
645 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
|
646 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
|
647 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
|
648 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
|
649 |
e83b3b3941cf
x-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 (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
|
651 (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
|
652 (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
|
653 (+ (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
|
654 (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
|
655 (+ (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
|
656 (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
|
657 |
e83b3b3941cf
x-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 ((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
|
659 (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
|
660 (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
|
661 (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
|
662 (+ (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
|
663 (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
|
664 (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
|
665 (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
|
666 (+ (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
|
667 (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
|
668 |
e83b3b3941cf
x-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 (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
|
670 (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
|
671 (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
|
672 (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
|
673 |
e83b3b3941cf
x-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 ((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
|
675 (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
|
676 (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
|
677 (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
|
678 (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
|
679 (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
|
680 (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
|
681 (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
|
682 (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
|
683 (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
|
684 (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
|
685 (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
|
686 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
|
687 |
e83b3b3941cf
x-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 |
e83b3b3941cf
x-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 (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
|
690 '((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
|
691 (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
|
692 (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
|
693 (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
|
694 (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
|
695 (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
|
696 (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
|
697 (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
|
698 (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
|
699 "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
|
700 |
e83b3b3941cf
x-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 (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
|
702 '((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
|
703 (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
|
704 (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
|
705 (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
|
706 (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
|
707 "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
|
708 |
e83b3b3941cf
x-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 (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
|
710 (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
|
711 (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
|
712 (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
|
713 (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
|
714 (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
|
715 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
|
716 |
e83b3b3941cf
x-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 (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
|
718 (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
|
719 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
|
720 (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
|
721 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
|
722 (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
|
723 (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
|
724 (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
|
725 '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
|
726 (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
|
727 (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
|
728 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
|
729 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
|
730 |
e83b3b3941cf
x-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 ;; 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
|
732 ;; 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
|
733 ((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
|
734 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
|
735 |
e83b3b3941cf
x-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 ((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
|
737 (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
|
738 (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
|
739 (x-dnd-get-motif-value data 4 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
|
740 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
|
741 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
|
742 (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
|
743 (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
|
744 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
|
745 (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
|
746 (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
|
747 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
|
748 (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
|
749 (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
|
750 (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
|
751 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
|
752 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
|
753 (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
|
754 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
|
755 (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
|
756 (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
|
757 (if reply-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
|
758 (+ reply-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
|
759 ?\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
|
760 ?\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
|
761 ?\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
|
762 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
|
763 (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
|
764 (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
|
765 (+ ?\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
|
766 (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
|
767 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
|
768 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
|
769 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
|
770 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
|
771 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
|
772 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
|
773 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
|
774 (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
|
775 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
|
776 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
|
777 "_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
|
778 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
|
779 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
|
780 |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
781 ((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
|
782 (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
|
783 (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
|
784 (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
|
785 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
|
786 (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
|
787 (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
|
788 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
|
789 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
|
790 (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
|
791 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
|
792 (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
|
793 (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
|
794 (if reply-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
|
795 (+ reply-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
|
796 ?\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
|
797 ?\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
|
798 ?\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
|
799 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
|
800 (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
|
801 (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
|
802 (+ ?\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
|
803 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
|
804 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
|
805 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
|
806 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
|
807 (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
|
808 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
|
809 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
|
810 "_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
|
811 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
|
812 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
|
813 |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
814 ((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
|
815 (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
|
816 (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
|
817 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
|
818 (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
|
819 (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
|
820 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
|
821 (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
|
822 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
|
823 (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
|
824 (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
|
825 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
|
826 (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
|
827 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
|
828 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
|
829 (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
|
830 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
|
831 (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
|
832 (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
|
833 (if reply-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
|
834 (+ reply-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
|
835 ?\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
|
836 ?\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
|
837 (+ ?\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
|
838 ?\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
|
839 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
|
840 (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
|
841 (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
|
842 (+ ?\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
|
843 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
|
844 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
|
845 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
|
846 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
|
847 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
|
848 (timestamp (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
|
849 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
|
850 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
|
851 |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
852 (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
|
853 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
|
854 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
|
855 "_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
|
856 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
|
857 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
|
858 (setq 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
|
859 (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
|
860 (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
|
861 (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
|
862 (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
|
863 (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
|
864 (condition-case 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
|
865 (x-dnd-drop-data event frame window 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
|
866 (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
|
867 (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
|
868 (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
|
869 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
|
870 (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
|
871 (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
|
872 (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
|
873 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
|
874 (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
|
875 |
56852
4504840779eb
* x-dnd.el (x-dnd-protocol-alist): Document update.
Jan Djärv <jan.h.d@swipnet.se>
parents:
54986
diff
changeset
|
876 (t (error "Unknown Motif DND message %s %s" message-atom data))))) |
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
|
877 |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
878 |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
879 ;;; |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
880 |
e83b3b3941cf
x-dnd.el: Add COMPOUND_TEXT, handle FILE_NAME correctly, add Motif (CDE)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53823
diff
changeset
|
881 |
53789
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
882 (provide 'x-dnd) |
7efe8089eadf
* x-dnd.el: New file for drag and drop.
Jan Djärv <jan.h.d@swipnet.se>
parents:
diff
changeset
|
883 |
53797 | 884 ;;; 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
|
885 ;;; x-dnd.el ends here |