]> git.eshelyaron.com Git - emacs.git/commitdiff
Ignore mouse movement correctly on Haiku during drag and drop
authorPo Lu <luangruo@yahoo.com>
Wed, 30 Mar 2022 08:24:45 +0000 (08:24 +0000)
committerPo Lu <luangruo@yahoo.com>
Wed, 30 Mar 2022 08:24:45 +0000 (08:24 +0000)
* src/haikuselect.c (haiku_unwind_drag_message): New function.
(Fhaiku_drag_message): Set `haiku_dnd_in_progress' to false.
* src/haikuterm.c (haiku_read_socket): Fix overriding of
need_flush when reading events from multiple frames.
* src/haikuterm.h (haiku_dnd_in_progress): New variable.
* src/xdisp.c (note_mouse_highlight): Ignore if said variable is
true.

src/haikuselect.c
src/haikuterm.c
src/haikuterm.h
src/xdisp.c

index 77dcff42a613699144fbe8f57b6ff4fdfec9ed3c..d2582e777f181a02cfba98c515d21cc714e31d1b 100644 (file)
@@ -27,6 +27,7 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 
 #include <stdlib.h>
 
+bool haiku_dnd_in_progress;
 static void haiku_lisp_to_message (Lisp_Object, void *);
 
 DEFUN ("haiku-selection-data", Fhaiku_selection_data, Shaiku_selection_data,
@@ -723,6 +724,13 @@ haiku_should_quit_drag (void)
   return !NILP (Vquit_flag);
 }
 
+static void
+haiku_unwind_drag_message (void *message)
+{
+  BMessage_delete (message);
+  haiku_dnd_in_progress = false;
+}
+
 DEFUN ("haiku-drag-message", Fhaiku_drag_message, Shaiku_drag_message,
        2, 3, 0,
        doc: /* Begin dragging MESSAGE from FRAME.
@@ -768,9 +776,10 @@ ignored if it is dropped on top of FRAME.  */)
   if (!FRAME_VISIBLE_P (f))
     error ("Frame is invisible");
 
+  haiku_dnd_in_progress = true;
   be_message = be_create_simple_message ();
 
-  record_unwind_protect_ptr (BMessage_delete, be_message);
+  record_unwind_protect_ptr (haiku_unwind_drag_message, be_message);
   haiku_lisp_to_message (message, be_message);
   rc = be_drag_message (FRAME_HAIKU_VIEW (f), be_message,
                        !NILP (allow_same_frame),
index c2e8375a10c8118e68e4501d83c5dfd0a74c7234..304b7a3425586ebd97859db853af12cf7c1af562 100644 (file)
@@ -58,7 +58,7 @@ struct unhandled_event
   uint8_t buffer[200];
 };
 
-static bool any_help_event_p = false;
+static bool any_help_event_p;
 
 char *
 get_keysym_name (int keysym)
@@ -3120,7 +3120,8 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
                  do_help = 1;
              }
 
-           need_flush = FRAME_DIRTY_P (f);
+           if (FRAME_DIRTY_P (f))
+             need_flush = 1;
            break;
          }
        case BUTTON_UP:
index 5f8052f0f99ec311453fb74c29d61c4156a42e59..86abcc560c9473fa9954c230f96d8acfa1568127 100644 (file)
@@ -35,6 +35,7 @@ along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
 #define HAVE_CHAR_CACHE_MAX 65535
 
 extern int popup_activated_p;
+extern bool haiku_dnd_in_progress;
 
 extern void be_app_quit (void);
 
index 62c8f9d4d9317a3878f910d0f87b121398c6b6b8..f6fe3253e98c94fc81e0d1757585e116e211bf6e 100644 (file)
@@ -34247,7 +34247,7 @@ note_mouse_highlight (struct frame *f, int x, int y)
 #endif
 
 #if defined (HAVE_HAIKU)
-  if (popup_activated_p)
+  if (popup_activated_p || haiku_dnd_in_progress)
     return;
 #endif