]> git.eshelyaron.com Git - emacs.git/commitdiff
(mouse_face_overlay_overlaps): New function.
authorGerd Moellmann <gerd@gnu.org>
Tue, 6 Mar 2001 15:28:48 +0000 (15:28 +0000)
committerGerd Moellmann <gerd@gnu.org>
Tue, 6 Mar 2001 15:28:48 +0000 (15:28 +0000)
src/buffer.c

index f019863e80b92fddf2af580496a39895106467a8..99e298a5cd052ed67115f515449a7e379c298f3d 100644 (file)
@@ -1,5 +1,5 @@
 /* Buffer manipulation primitives for GNU Emacs.
-   Copyright (C) 1985,86,87,88,89,93,94,95,97,98, 1999, 2000
+   Copyright (C) 1985,86,87,88,89,93,94,95,97,98, 1999, 2000, 2001
        Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -2518,6 +2518,40 @@ overlays_in (beg, end, extend, vec_ptr, len_ptr, next_ptr, prev_ptr)
     *prev_ptr = prev;
   return idx;
 }
+
+
+/* Return non-zero if there exists an overlay with a non-nil
+   `mouse-face' property overlapping OVERLAY.  */
+
+int
+mouse_face_overlay_overlaps (overlay)
+     Lisp_Object overlay;
+{
+  int start = OVERLAY_POSITION (OVERLAY_START (overlay));
+  int end = OVERLAY_POSITION (OVERLAY_END (overlay));
+  int n, i;
+  Lisp_Object *v, tem;
+  
+  n = 10;
+  v = (Lisp_Object *) alloca (n * sizeof *v);
+  i = overlays_in (start, end, 0, &v, &n, NULL, NULL);
+  if (i > n)
+    {
+      n = i;
+      v = (Lisp_Object *) alloca (n * sizeof *v);
+      overlays_in (start, end, 0, &v, &n, NULL, NULL);
+    }
+
+  for (i = 0; i < n; ++i)
+    if (!EQ (v[i], overlay)
+       && (tem = Foverlay_get (overlay, Qmouse_face),
+           !NILP (tem)))
+      break;
+
+  return i < n;
+}
+
+
 \f
 /* Fast function to just test if we're at an overlay boundary.  */
 int