Refactor mouse positioning stuff to avoid code duplication.
* frame.h (frame_char_to_pixel_position): New function. (x_set_mouse_position): Rename to... (frame_set_mouse_position): ...new function. (frame_set_mouse_pixel_position): Add prototype. * nsterm.m, w32term.c, xterm.c (x_set_mouse_pixel_position): Rename to frame_set_mouse_pixel_position. * frame.c (Fset_mouse_pixel_position, Fset_mouse_position): Adjust users. * xterm.h, w32term.h ( x_set_mouse_position) (x_set_mouse_pixel_position): Remove prototypes.
This commit is contained in:
parent
8e6abb8506
commit
2b51137406
8 changed files with 52 additions and 76 deletions
|
@ -1,3 +1,17 @@
|
|||
2014-05-28 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
Refactor mouse positioning stuff to avoid code duplication.
|
||||
* frame.h (frame_char_to_pixel_position): New function.
|
||||
(x_set_mouse_position): Rename to...
|
||||
(frame_set_mouse_position): ...new function.
|
||||
(frame_set_mouse_pixel_position): Add prototype.
|
||||
* nsterm.m, w32term.c, xterm.c (x_set_mouse_pixel_position):
|
||||
Rename to frame_set_mouse_pixel_position.
|
||||
* frame.c (Fset_mouse_pixel_position, Fset_mouse_position):
|
||||
Adjust users.
|
||||
* xterm.h, w32term.h ( x_set_mouse_position)
|
||||
(x_set_mouse_pixel_position): Remove prototypes.
|
||||
|
||||
2014-05-28 Dmitry Antipov <dmantipov@yandex.ru>
|
||||
|
||||
On X, always make pointer visible when deleting frame (Bug#17609).
|
||||
|
|
|
@ -1617,7 +1617,7 @@ before calling this function on it, like this.
|
|||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
if (FRAME_WINDOW_P (XFRAME (frame)))
|
||||
/* Warping the mouse will cause enternotify and focus events. */
|
||||
x_set_mouse_position (XFRAME (frame), XINT (x), XINT (y));
|
||||
frame_set_mouse_position (XFRAME (frame), XINT (x), XINT (y));
|
||||
#else
|
||||
#if defined (MSDOS)
|
||||
if (FRAME_MSDOS_P (XFRAME (frame)))
|
||||
|
@ -1658,7 +1658,7 @@ before calling this function on it, like this.
|
|||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
if (FRAME_WINDOW_P (XFRAME (frame)))
|
||||
/* Warping the mouse will cause enternotify and focus events. */
|
||||
x_set_mouse_pixel_position (XFRAME (frame), XINT (x), XINT (y));
|
||||
frame_set_mouse_pixel_position (XFRAME (frame), XINT (x), XINT (y));
|
||||
#else
|
||||
#if defined (MSDOS)
|
||||
if (FRAME_MSDOS_P (XFRAME (frame)))
|
||||
|
|
34
src/frame.h
34
src/frame.h
|
@ -1313,8 +1313,7 @@ extern void set_frame_menubar (struct frame *f, bool first_time, bool deep_p);
|
|||
extern void x_set_window_size (struct frame *f, int change_grav,
|
||||
int width, int height, bool pixelwise);
|
||||
extern Lisp_Object x_get_focus_frame (struct frame *);
|
||||
extern void x_set_mouse_position (struct frame *f, int h, int v);
|
||||
extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y);
|
||||
extern void frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y);
|
||||
extern void x_make_frame_visible (struct frame *f);
|
||||
extern void x_make_frame_invisible (struct frame *f);
|
||||
extern void x_iconify_frame (struct frame *f);
|
||||
|
@ -1366,6 +1365,37 @@ flush_frame (struct frame *f)
|
|||
rif->flush_display (f);
|
||||
}
|
||||
|
||||
/* Convert character coordinates X and Y to pixel
|
||||
coordinates PIX_X and PIX_Y on frame F. */
|
||||
|
||||
INLINE void
|
||||
frame_char_to_pixel_position (struct frame *f, int x, int y, int *pix_x, int *pix_y)
|
||||
{
|
||||
*pix_x = FRAME_COL_TO_PIXEL_X (f, x) + FRAME_COLUMN_WIDTH (f) / 2;
|
||||
*pix_y = FRAME_LINE_TO_PIXEL_Y (f, y) + FRAME_LINE_HEIGHT (f) / 2;
|
||||
|
||||
if (*pix_x < 0)
|
||||
*pix_x = 0;
|
||||
if (*pix_x > FRAME_PIXEL_WIDTH (f))
|
||||
*pix_x = FRAME_PIXEL_WIDTH (f);
|
||||
|
||||
if (*pix_y < 0)
|
||||
*pix_y = 0;
|
||||
if (*pix_y > FRAME_PIXEL_HEIGHT (f))
|
||||
*pix_y = FRAME_PIXEL_HEIGHT (f);
|
||||
}
|
||||
|
||||
/* Reposition mouse pointer to character coordinates X and Y on frame F. */
|
||||
|
||||
INLINE
|
||||
void frame_set_mouse_position (struct frame *f, int x, int y)
|
||||
{
|
||||
int pix_x, pix_y;
|
||||
|
||||
frame_char_to_pixel_position (f, x, y, &pix_x, &pix_y);
|
||||
frame_set_mouse_pixel_position (f, pix_x, pix_y);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
Multimonitor data
|
||||
***********************************************************************/
|
||||
|
|
26
src/nsterm.m
26
src/nsterm.m
|
@ -1812,12 +1812,12 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
|
||||
|
||||
void
|
||||
x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
||||
frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
||||
/* --------------------------------------------------------------------------
|
||||
Programmatically reposition mouse pointer in pixel coordinates
|
||||
-------------------------------------------------------------------------- */
|
||||
{
|
||||
NSTRACE (x_set_mouse_pixel_position);
|
||||
NSTRACE (frame_set_mouse_pixel_position);
|
||||
ns_raise_frame (f);
|
||||
#if 0
|
||||
/* FIXME: this does not work, and what about GNUstep? */
|
||||
|
@ -1829,28 +1829,6 @@ Free a pool and temporary objects it refers to (callable from C)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
x_set_mouse_position (struct frame *f, int h, int v)
|
||||
/* --------------------------------------------------------------------------
|
||||
Programmatically reposition mouse pointer in character coordinates
|
||||
-------------------------------------------------------------------------- */
|
||||
{
|
||||
int pix_x, pix_y;
|
||||
|
||||
pix_x = FRAME_COL_TO_PIXEL_X (f, h) + FRAME_COLUMN_WIDTH (f) / 2;
|
||||
pix_y = FRAME_LINE_TO_PIXEL_Y (f, v) + FRAME_LINE_HEIGHT (f) / 2;
|
||||
|
||||
if (pix_x < 0) pix_x = 0;
|
||||
if (pix_x > FRAME_PIXEL_WIDTH (f)) pix_x = FRAME_PIXEL_WIDTH (f);
|
||||
|
||||
if (pix_y < 0) pix_y = 0;
|
||||
if (pix_y > FRAME_PIXEL_HEIGHT (f)) pix_y = FRAME_PIXEL_HEIGHT (f);
|
||||
|
||||
x_set_mouse_pixel_position (f, pix_x, pix_y);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
note_mouse_movement (struct frame *frame, CGFloat x, CGFloat y)
|
||||
/* ------------------------------------------------------------------------
|
||||
|
|
|
@ -5767,27 +5767,8 @@ x_set_window_size (struct frame *f, int change_gravity, int width, int height, b
|
|||
|
||||
/* Mouse warping. */
|
||||
|
||||
void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y);
|
||||
|
||||
void
|
||||
x_set_mouse_position (struct frame *f, int x, int y)
|
||||
{
|
||||
int pix_x, pix_y;
|
||||
|
||||
pix_x = FRAME_COL_TO_PIXEL_X (f, x) + FRAME_COLUMN_WIDTH (f) / 2;
|
||||
pix_y = FRAME_LINE_TO_PIXEL_Y (f, y) + FRAME_LINE_HEIGHT (f) / 2;
|
||||
|
||||
if (pix_x < 0) pix_x = 0;
|
||||
if (pix_x > FRAME_PIXEL_WIDTH (f)) pix_x = FRAME_PIXEL_WIDTH (f);
|
||||
|
||||
if (pix_y < 0) pix_y = 0;
|
||||
if (pix_y > FRAME_PIXEL_HEIGHT (f)) pix_y = FRAME_PIXEL_HEIGHT (f);
|
||||
|
||||
x_set_mouse_pixel_position (f, pix_x, pix_y);
|
||||
}
|
||||
|
||||
void
|
||||
x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
||||
frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
||||
{
|
||||
RECT rect;
|
||||
POINT pt;
|
||||
|
|
|
@ -219,8 +219,6 @@ extern void x_set_window_size (struct frame *f, int change_grav,
|
|||
extern int x_display_pixel_height (struct w32_display_info *);
|
||||
extern int x_display_pixel_width (struct w32_display_info *);
|
||||
extern Lisp_Object x_get_focus_frame (struct frame *);
|
||||
extern void x_set_mouse_position (struct frame *f, int h, int v);
|
||||
extern void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y);
|
||||
extern void x_make_frame_visible (struct frame *f);
|
||||
extern void x_make_frame_invisible (struct frame *f);
|
||||
extern void x_iconify_frame (struct frame *f);
|
||||
|
|
25
src/xterm.c
25
src/xterm.c
|
@ -8735,34 +8735,11 @@ x_set_window_size (struct frame *f, int change_gravity, int width, int height, b
|
|||
|
||||
unblock_input ();
|
||||
}
|
||||
|
||||
/* Mouse warping. */
|
||||
|
||||
void
|
||||
x_set_mouse_position (struct frame *f, int x, int y)
|
||||
{
|
||||
int pix_x, pix_y;
|
||||
|
||||
pix_x = FRAME_COL_TO_PIXEL_X (f, x) + FRAME_COLUMN_WIDTH (f) / 2;
|
||||
pix_y = FRAME_LINE_TO_PIXEL_Y (f, y) + FRAME_LINE_HEIGHT (f) / 2;
|
||||
|
||||
if (pix_x < 0) pix_x = 0;
|
||||
if (pix_x > FRAME_PIXEL_WIDTH (f)) pix_x = FRAME_PIXEL_WIDTH (f);
|
||||
|
||||
if (pix_y < 0) pix_y = 0;
|
||||
if (pix_y > FRAME_PIXEL_HEIGHT (f)) pix_y = FRAME_PIXEL_HEIGHT (f);
|
||||
|
||||
block_input ();
|
||||
|
||||
XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f),
|
||||
0, 0, 0, 0, pix_x, pix_y);
|
||||
unblock_input ();
|
||||
}
|
||||
|
||||
/* Move the mouse to position pixel PIX_X, PIX_Y relative to frame F. */
|
||||
|
||||
void
|
||||
x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
||||
frame_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y)
|
||||
{
|
||||
block_input ();
|
||||
|
||||
|
|
|
@ -931,8 +931,6 @@ extern bool x_had_errors_p (Display *);
|
|||
extern void x_uncatch_errors (void);
|
||||
extern void x_clear_errors (Display *);
|
||||
extern void x_set_window_size (struct frame *, int, int, int, bool);
|
||||
extern void x_set_mouse_position (struct frame *, int, int);
|
||||
extern void x_set_mouse_pixel_position (struct frame *, int, int);
|
||||
extern void xembed_request_focus (struct frame *);
|
||||
extern void x_ewmh_activate_frame (struct frame *);
|
||||
extern void x_delete_terminal (struct terminal *terminal);
|
||||
|
|
Loading…
Add table
Reference in a new issue