diff options
author | Po Lu <luangruo@yahoo.com> | 2022-03-18 09:21:39 +0000 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2022-03-18 09:22:13 +0000 |
commit | 2b05a06786e7b5adf9d4329959da49d9b40c2bef (patch) | |
tree | 43afa72bbceb0a45cc92ea65cd84f29fbd74d6cd /src/haikuselect.c | |
parent | ff89d27c07de4ac2efc695b06e8aa1faec5d65d1 (diff) | |
download | emacs-2b05a06786e7b5adf9d4329959da49d9b40c2bef.tar.gz emacs-2b05a06786e7b5adf9d4329959da49d9b40c2bef.tar.bz2 emacs-2b05a06786e7b5adf9d4329959da49d9b40c2bef.zip |
Implement drag-and-drop of files on Haiku
* lisp/term/haiku-win.el (haiku-dnd-selection-converters): Add
new selection converter.
(haiku-dnd-convert-uri-list): New function.
(x-begin-drag): Allow selection converters to change message
field type.
* src/haikuselect.c (haiku_lisp_to_message): Perform more error
checking.
Diffstat (limited to 'src/haikuselect.c')
-rw-r--r-- | src/haikuselect.c | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/src/haikuselect.c b/src/haikuselect.c index 807cbc24939..8192a1ad5b9 100644 --- a/src/haikuselect.c +++ b/src/haikuselect.c @@ -351,6 +351,7 @@ haiku_lisp_to_message (Lisp_Object obj, void *message) int8 char_data; bool bool_data; intmax_t t4; + int rc; CHECK_LIST (obj); for (tem = obj; CONSP (tem); tem = XCDR (tem)) @@ -390,10 +391,13 @@ haiku_lisp_to_message (Lisp_Object obj, void *message) short_data = XFIXNUM (data); block_input (); - be_add_message_data (message, SSDATA (name), - type_code, &short_data, - sizeof short_data); + rc = be_add_message_data (message, SSDATA (name), + type_code, &short_data, + sizeof short_data); unblock_input (); + + if (rc) + signal_error ("Failed to add short", data); break; case 'LONG': @@ -417,10 +421,13 @@ haiku_lisp_to_message (Lisp_Object obj, void *message) } block_input (); - be_add_message_data (message, SSDATA (name), - type_code, &long_data, - sizeof long_data); + rc = be_add_message_data (message, SSDATA (name), + type_code, &long_data, + sizeof long_data); unblock_input (); + + if (rc) + signal_error ("Failed to add long", data); break; case 'LLNG': @@ -443,10 +450,13 @@ haiku_lisp_to_message (Lisp_Object obj, void *message) } block_input (); - be_add_message_data (message, SSDATA (name), - type_code, &llong_data, - sizeof llong_data); + rc = be_add_message_data (message, SSDATA (name), + type_code, &llong_data, + sizeof llong_data); unblock_input (); + + if (rc) + signal_error ("Failed to add llong", data); break; case 'CHAR': @@ -456,30 +466,39 @@ haiku_lisp_to_message (Lisp_Object obj, void *message) char_data = XFIXNUM (data); block_input (); - be_add_message_data (message, SSDATA (name), - type_code, &char_data, - sizeof char_data); + rc = be_add_message_data (message, SSDATA (name), + type_code, &char_data, + sizeof char_data); unblock_input (); + + if (rc) + signal_error ("Failed to add char", data); break; case 'BOOL': bool_data = !NILP (data); block_input (); - be_add_message_data (message, SSDATA (name), - type_code, &bool_data, - sizeof bool_data); + rc = be_add_message_data (message, SSDATA (name), + type_code, &bool_data, + sizeof bool_data); unblock_input (); + + if (rc) + signal_error ("Failed to add bool", data); break; default: CHECK_STRING (data); block_input (); - be_add_message_data (message, SSDATA (name), - type_code, SDATA (data), - SBYTES (data)); + rc = be_add_message_data (message, SSDATA (name), + type_code, SDATA (data), + SBYTES (data)); unblock_input (); + + if (rc) + signal_error ("Failed to add", data); } } CHECK_LIST_END (t2, t1); |