1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-04-01 11:41:39 -07:00

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'.
This commit is contained in:
Po Lu 2022-03-25 13:41:30 +00:00
parent 8ba0f19064
commit 4dfd42014b
4 changed files with 15 additions and 8 deletions

View file

@ -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");

View file

@ -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),

View file

@ -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);