mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-03 02:31:03 -08:00
Avoid leaving "ghost" of mouse pointer on MS-Windows
* src/w32term.c (frame_set_mouse_pixel_position): * src/w32fns.c (Fw32_mouse_absolute_pixel_position): Momentarily disable "mouse trails" when moving the mouse pointer. (Bug#22247) * src/w32term.c (frame_set_mouse_pixel_position): Include w32common.h.
This commit is contained in:
parent
f9d87dd879
commit
3ad99c4674
2 changed files with 22 additions and 0 deletions
11
src/w32fns.c
11
src/w32fns.c
|
|
@ -8093,11 +8093,22 @@ The coordinates X and Y are interpreted in pixels relative to a position
|
|||
(0, 0) of the selected frame's display. */)
|
||||
(Lisp_Object x, Lisp_Object y)
|
||||
{
|
||||
UINT trail_num = 0;
|
||||
BOOL ret = false;
|
||||
|
||||
CHECK_TYPE_RANGED_INTEGER (int, x);
|
||||
CHECK_TYPE_RANGED_INTEGER (int, y);
|
||||
|
||||
block_input ();
|
||||
/* When "mouse trails" are in effect, moving the mouse cursor
|
||||
sometimes leaves behind an annoying "ghost" of the pointer.
|
||||
Avoid that by momentarily switching off mouse trails. */
|
||||
if (os_subtype == OS_NT
|
||||
&& w32_major_version + w32_minor_version >= 6)
|
||||
ret = SystemParametersInfo (SPI_GETMOUSETRAILS, 0, &trail_num, 0);
|
||||
SetCursorPos (XINT (x), XINT (y));
|
||||
if (ret)
|
||||
SystemParametersInfo (SPI_SETMOUSETRAILS, trail_num, NULL, 0);
|
||||
unblock_input ();
|
||||
|
||||
return Qnil;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
|
|||
#include "lisp.h"
|
||||
#include "blockinput.h"
|
||||
#include "w32term.h"
|
||||
#include "w32common.h" /* for OS version info */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
|
|
@ -6237,6 +6238,8 @@ x_set_window_size (struct frame *f, bool change_gravity,
|
|||
void
|
||||
frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
||||
{
|
||||
UINT trail_num = 0;
|
||||
BOOL ret = false;
|
||||
RECT rect;
|
||||
POINT pt;
|
||||
|
||||
|
|
@ -6247,7 +6250,15 @@ frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
|||
pt.y = rect.top + pix_y;
|
||||
ClientToScreen (FRAME_W32_WINDOW (f), &pt);
|
||||
|
||||
/* When "mouse trails" are in effect, moving the mouse cursor
|
||||
sometimes leaves behind an annoying "ghost" of the pointer.
|
||||
Avoid that by momentarily switching off mouse trails. */
|
||||
if (os_subtype == OS_NT
|
||||
&& w32_major_version + w32_minor_version >= 6)
|
||||
ret = SystemParametersInfo (SPI_GETMOUSETRAILS, 0, &trail_num, 0);
|
||||
SetCursorPos (pt.x, pt.y);
|
||||
if (ret)
|
||||
SystemParametersInfo (SPI_SETMOUSETRAILS, trail_num, NULL, 0);
|
||||
|
||||
unblock_input ();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue