emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master c3f12cd5da: Implement (sort of) `drag-source' on Haiku


From: Po Lu
Subject: master c3f12cd5da: Implement (sort of) `drag-source' on Haiku
Date: Sun, 3 Apr 2022 07:10:09 -0400 (EDT)

branch: master
commit c3f12cd5da54c9d5180fccaeee2e34b05489def2
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Implement (sort of) `drag-source' on Haiku
    
    * src/haikuterm.c (haiku_mouse_or_wdesc_frame)
    (haiku_mouse_position): Behave reasonably when track_mouse is
    Qdrag_source.
---
 src/haikuterm.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/haikuterm.c b/src/haikuterm.c
index cdddf50d19..374d066787 100644
--- a/src/haikuterm.c
+++ b/src/haikuterm.c
@@ -452,7 +452,8 @@ haiku_mouse_or_wdesc_frame (void *window)
                        ? x_display_list->last_mouse_frame
                        : NULL);
 
-  if (lm_f && !EQ (track_mouse, Qdropping))
+  if (lm_f && !EQ (track_mouse, Qdropping)
+      && !EQ (track_mouse, Qdrag_source))
     return lm_f;
   else
     {
@@ -2566,6 +2567,9 @@ haiku_scroll_run (struct window *w, struct run *run)
   unblock_input ();
 }
 
+/* Haiku doesn't provide any way to get the frame actually underneath
+   the pointer, so we typically return dpyinfo->last_mouse_frame, and
+   refrain from returning anything if that doesn't exist.  */
 static void
 haiku_mouse_position (struct frame **fp, int insist, Lisp_Object *bar_window,
                      enum scroll_bar_part *part, Lisp_Object *x, Lisp_Object 
*y,
@@ -2585,7 +2589,9 @@ haiku_mouse_position (struct frame **fp, int insist, 
Lisp_Object *bar_window,
        XFRAME (frame)->mouse_moved = false;
     }
 
-  if (gui_mouse_grabbed (x_display_list) && !EQ (track_mouse, Qdropping))
+  if (gui_mouse_grabbed (x_display_list)
+      && !EQ (track_mouse, Qdropping)
+      && !EQ (track_mouse, Qdrag_source))
     f1 = x_display_list->last_mouse_frame;
 
   if (!f1 || FRAME_TOOLTIP_P (f1))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]