# HG changeset patch # User Dave Love # Date 951140940 0 # Node ID 83292274bbd47ec0af9f94ba0561b1ddb286d800 # Parent 94d0bfb9a844f02c7bfc01feed2ead2526095d75 (Vmouse_position_function): New variable. (Fmouse_position): Use it. (syms_of_frame): Install it. diff -r 94d0bfb9a844 -r 83292274bbd4 src/frame.c --- a/src/frame.c Mon Feb 21 13:00:25 2000 +0000 +++ b/src/frame.c Mon Feb 21 13:49:00 2000 +0000 @@ -1,5 +1,5 @@ /* Generic frame functions. - Copyright (C) 1993, 1994, 1995, 1997, 1999 Free Software Foundation. + Copyright (C) 1993, 1994, 1995, 1997, 1999, 2000 Free Software Foundation. This file is part of GNU Emacs. @@ -103,6 +103,7 @@ Lisp_Object Vterminal_frame; Lisp_Object Vdefault_frame_alist; +Lisp_Object Vmouse_position_function; static void syms_of_frame_1 () @@ -1375,13 +1376,15 @@ upper-left corner.\n\ If Emacs is running on a mouseless terminal or hasn't been programmed\n\ to read the mouse position, it returns the selected frame for FRAME\n\ -and nil for X and Y.") +and nil for X and Y.\n\ +Runs the abnormal hook `mouse-position-function' with the normal return\n\ +value as argument.") () { FRAME_PTR f; Lisp_Object lispy_dummy; enum scroll_bar_part party_dummy; - Lisp_Object x, y; + Lisp_Object x, y, retval; int col, row; unsigned long long_dummy; @@ -1405,7 +1408,14 @@ } #endif XSETFRAME (lispy_dummy, f); - return Fcons (lispy_dummy, Fcons (x, y)); + retval = Fcons (lispy_dummy, Fcons (x, y)); + if (!NILP (Vmouse_position_function)) + { + struct gcpro gcpro1, gcpro2; + GCPRO2 (x, y); + RETURN_UNGCPRO (call1 (Vmouse_position_function, retval)); + } + return retval; } DEFUN ("mouse-pixel-position", Fmouse_pixel_position, @@ -2344,6 +2354,12 @@ "Non-nil if all of emacs is iconified and frame updates are not needed."); Vemacs_iconified = Qnil; + DEFVAR_LISP ("mouse-position-function", &Vmouse_position_function, + "If non-nil, function applied to the normal result of `mouse-position'.\n\ +This abnormal hook exists for the benefit of packages like XTerm-mouse\n\ +which need to do mouse handling at the Lisp level."); + Vmouse_position_function = Qnil; + DEFVAR_KBOARD ("default-minibuffer-frame", Vdefault_minibuffer_frame, "Minibufferless frames use this frame's minibuffer.\n\ \n\