Fix some drag-and-drop handling on Haiku
authorPo Lu <luangruo@yahoo.com>
Sat, 11 Jun 2022 12:01:01 +0000 (12:01 +0000)
committerPo Lu <luangruo@yahoo.com>
Sat, 11 Jun 2022 12:01:22 +0000 (12:01 +0000)
* lisp/term/haiku-win.el (haiku-drag-and-drop): Don't raise
frame for some types of drags.

* src/haikuselect.c (haiku_unwind_drag_message): Don't hide
tooltip here.
(Fhaiku_drag_message): Only clear grab and hide tooltip if the
drag was successful.

lisp/term/haiku-win.el
src/haikuselect.c

index f99d332bd2b2554eb04d582900aa7328f2d46698..5443904a733bf2de4bee1c1eb8e73999d94ddea8 100644 (file)
@@ -316,7 +316,6 @@ or a pair of markers) and turns it into a file system reference."
        ((posn-area (event-start event)))
        ((assoc "refs" string)
         (with-selected-window window
-          (raise-frame)
           (dolist (filename (cddr (assoc "refs" string)))
             (dnd-handle-one-url window 'private
                                 (concat "file:" filename)))))
@@ -327,7 +326,6 @@ or a pair of markers) and turns it into a file system reference."
               (dnd-handle-one-url window 'private bf)))))
        ((assoc "text/plain" string)
         (with-selected-window window
-          (raise-frame)
           (dolist (text (cddr (assoc "text/plain" string)))
             (unless mouse-yank-at-point
               (goto-char (posn-point (event-start event))))
index b319aace96cae18bdc3dab9c7aea49eacd0a1d94..8a7b6f2e0b102f2e5a3e7dea25c2ab2717c98a32 100644 (file)
@@ -755,9 +755,6 @@ haiku_unwind_drag_message (void *message)
 {
   haiku_dnd_frame = NULL;
   BMessage_delete (message);
-
-  if (haiku_dnd_follow_tooltip)
-    Fx_hide_tip ();
 }
 
 DEFUN ("haiku-drag-message", Fhaiku_drag_message, Shaiku_drag_message,
@@ -826,11 +823,17 @@ currently being displayed to move along with the mouse pointer.  */)
                        process_pending_signals,
                        haiku_should_quit_drag);
 
-  FRAME_DISPLAY_INFO (f)->grabbed = 0;
-
+  /* Don't clear the mouse grab if the user decided to quit instead
+     of the drop finishing.  */
   if (rc)
     quit ();
 
+  /* Now dismiss the tooltip, since the drop presumably succeeded.  */
+  if (!NILP (follow_tooltip))
+    Fx_hide_tip ();
+
+  FRAME_DISPLAY_INFO (f)->grabbed = 0;
+
   return unbind_to (idx, Qnil);
 }