summaryrefslogtreecommitdiff
path: root/src/haikuselect.c
diff options
context:
space:
mode:
authorPo Lu <luangruo@yahoo.com>2022-03-18 09:21:39 +0000
committerPo Lu <luangruo@yahoo.com>2022-03-18 09:22:13 +0000
commit2b05a06786e7b5adf9d4329959da49d9b40c2bef (patch)
tree43afa72bbceb0a45cc92ea65cd84f29fbd74d6cd /src/haikuselect.c
parentff89d27c07de4ac2efc695b06e8aa1faec5d65d1 (diff)
downloademacs-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.c55
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);