]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow dragging messages with file names on Haiku
authorPo Lu <luangruo@yahoo.com>
Fri, 18 Mar 2022 05:48:10 +0000 (05:48 +0000)
committerPo Lu <luangruo@yahoo.com>
Fri, 18 Mar 2022 05:48:10 +0000 (05:48 +0000)
* src/haiku_select.cc (be_add_refs_data): New function.
* src/haikuselect.c (haiku_lisp_to_message): Handle `ref' type
correctly.
* src/haikuselect.h: Update prototypes.

src/haiku_select.cc
src/haikuselect.c
src/haikuselect.h

index 4212f60a4800f77b6fed3f0ac3d584fa4873b2e9..9012639d6af87e169fcc98091c2edf754f737009 100644 (file)
@@ -337,3 +337,20 @@ be_add_message_data (void *message, const char *name,
 
   return msg->AddData (name, type_code, buf, buf_size) != B_OK;
 }
+
+int
+be_add_refs_data (void *message, const char *name,
+                 const char *filename)
+{
+  BEntry entry (filename);
+  entry_ref ref;
+  BMessage *msg = (BMessage *) message;
+
+  if (entry.InitCheck () != B_OK)
+    return 1;
+
+  if (entry.GetRef (&ref) != B_OK)
+    return 1;
+
+  return msg->AddRef (name, &ref) != B_OK;
+}
index 7474ff12327f77216dd6449c3ca17625c7946a93..807cbc24939315ae0eca7331d56864aa0707d4cc 100644 (file)
@@ -378,7 +378,10 @@ haiku_lisp_to_message (Lisp_Object obj, void *message)
          switch (type_code)
            {
            case 'RREF':
-             signal_error ("Cannot deserialize data type", type_sym);
+             CHECK_STRING (data);
+
+             if (be_add_refs_data (message, SSDATA (name), SSDATA (data)))
+               signal_error ("Invalid file name", data);
              break;
 
            case 'SHRT':
index 366890d1a46fae2807e13b12609146a1194f1e15..4869d9d33c2c52a0b41eb14d05ef3fbe31caf075 100644 (file)
@@ -91,6 +91,8 @@ extern "C"
   extern int be_add_message_data (void *message, const char *name,
                                  int32 type_code, const void *buf,
                                  ssize_t buf_size);
+  extern int be_add_refs_data (void *message, const char *name,
+                              const char *filename);
 #ifdef __cplusplus
 };
 #endif