[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 4dfd42014b: Implement new drag and drop parameter on Haiku
From: |
Po Lu |
Subject: |
master 4dfd42014b: Implement new drag and drop parameter on Haiku |
Date: |
Fri, 25 Mar 2022 09:43:44 -0400 (EDT) |
branch: master
commit 4dfd42014b50aadd82b425747fe65fa97df28caa
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Implement new drag and drop parameter on Haiku
* lisp/term/haiku-win.el (x-begin-drag): Implement
`allow-current-frame'.
* src/haiku_support.cc (be_drag_message): New argument
`allow_same_view'.
* src/haiku_support.h: Update prototypes.
* src/haikuselect.c (Fhaiku_drag_message): New parameter
`allow-same-frame'.
---
lisp/term/haiku-win.el | 4 ++--
src/haiku_support.cc | 7 +++++--
src/haiku_support.h | 2 +-
src/haikuselect.c | 10 +++++++---
4 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/lisp/term/haiku-win.el b/lisp/term/haiku-win.el
index d04da2fdae..2f106825c3 100644
--- a/lisp/term/haiku-win.el
+++ b/lisp/term/haiku-win.el
@@ -199,7 +199,7 @@ This is necessary because on Haiku `use-system-tooltip'
doesn't
take effect on menu items until the menu bar is updated again."
(force-mode-line-update t))
-(defun x-begin-drag (targets &optional action frame _return-frame
_allow-current-frame)
+(defun x-begin-drag (targets &optional action frame _return-frame
allow-current-frame)
"SKIP: real doc in xfns.c."
(unless haiku-dnd-selection-value
(error "No local value for XdndSelection"))
@@ -228,7 +228,7 @@ take effect on menu items until the menu bar is updated
again."
action)
'XdndActionCopy)
(haiku-drag-message (or frame (selected-frame))
- message))))
+ message allow-current-frame))))
(add-variable-watcher 'use-system-tooltips #'haiku-use-system-tooltips-watcher)
diff --git a/src/haiku_support.cc b/src/haiku_support.cc
index b58420fcb9..a1616258bc 100644
--- a/src/haiku_support.cc
+++ b/src/haiku_support.cc
@@ -4068,7 +4068,7 @@ be_drag_message_thread_entry (void *thread_data)
}
bool
-be_drag_message (void *view, void *message,
+be_drag_message (void *view, void *message, bool allow_same_view,
void (*block_input_function) (void),
void (*unblock_input_function) (void),
void (*process_pending_signals_function) (void),
@@ -4083,7 +4083,10 @@ be_drag_message (void *view, void *message,
ssize_t stat;
block_input_function ();
- msg->AddInt32 ("emacs:window_id", window->window_id);
+
+ if (!allow_same_view)
+ msg->AddInt32 ("emacs:window_id", window->window_id);
+
if (!vw->LockLooper ())
gui_abort ("Failed to lock view looper for drag");
diff --git a/src/haiku_support.h b/src/haiku_support.h
index c978926e73..ae3ad6a68a 100644
--- a/src/haiku_support.h
+++ b/src/haiku_support.h
@@ -944,7 +944,7 @@ extern "C"
BMessage_delete (void *message);
extern bool
- be_drag_message (void *view, void *message,
+ be_drag_message (void *view, void *message, bool allow_same_view,
void (*block_input_function) (void),
void (*unblock_input_function) (void),
void (*process_pending_signals_function) (void),
diff --git a/src/haikuselect.c b/src/haikuselect.c
index 5540f467c0..f1aa4f20d9 100644
--- a/src/haikuselect.c
+++ b/src/haikuselect.c
@@ -585,7 +585,7 @@ haiku_should_quit_drag (void)
}
DEFUN ("haiku-drag-message", Fhaiku_drag_message, Shaiku_drag_message,
- 2, 2, 0,
+ 2, 3, 0,
doc: /* Begin dragging MESSAGE from FRAME.
MESSAGE an alist of strings, denoting message field names, to a list
@@ -606,8 +606,11 @@ associates to a 32-bit unsigned integer describing the
type of the
system message.
FRAME is a window system frame that must be visible, from which the
-drag will originate. */)
- (Lisp_Object frame, Lisp_Object message)
+drag will originate.
+
+ALLOW-SAME-FRAME, if nil or not specified, means that MESSAGE will be
+ignored if it is dropped on top of FRAME. */)
+ (Lisp_Object frame, Lisp_Object message, Lisp_Object allow_same_frame)
{
specpdl_ref idx;
void *be_message;
@@ -625,6 +628,7 @@ drag will originate. */)
record_unwind_protect_ptr (BMessage_delete, be_message);
haiku_lisp_to_message (message, be_message);
rc = be_drag_message (FRAME_HAIKU_VIEW (f), be_message,
+ !NILP (allow_same_frame),
block_input, unblock_input,
process_pending_signals,
haiku_should_quit_drag);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 4dfd42014b: Implement new drag and drop parameter on Haiku,
Po Lu <=