9
0
Fork 0

Only provide mouse input if mouse is in window

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@1374 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo 2008-12-01 16:33:44 +00:00
parent 87052195fa
commit 8ecf6c58ab
2 changed files with 34 additions and 10 deletions

View File

@ -106,16 +106,30 @@ void nxmu_mousereport(struct nxbe_window_s *wnd)
struct nxclimsg_mousein_s outmsg;
int ret;
outmsg.msgid = NX_CLIMSG_MOUSEIN;
outmsg.wnd = wnd;
outmsg.pos.x = g_mpos.x;
outmsg.pos.y = g_mpos.y;
outmsg.buttons = g_mbutton;
/* Does this window support mouse callbacks? */
ret = mq_send(wnd->conn->swrmq, outmsg, sizeof(struct nxclimsg_mousein_s), NX_SVRMSG_PRIO);
if (ret < 0)
if (win->cb->mousein)
{
gdbg("mq_send failed: %d\n", errno);
/* Yes.. Does the mount position lie within the window? */
if (nxgl_rectinside(wnd->bounds, g_mpos))
{
/* Yes... Convert the mouse position to window relative
* coordinates and send it to the client
*/
outmsg.msgid = NX_CLIMSG_MOUSEIN;
outmsg.wnd = wnd;
outmsg.buttons = g_mbutton;
nxgl_vectsubtract(&outmsg.pos, g_mpos, wnd->origin);
ret = mq_send(wnd->conn->swrmq, outmsg,
sizeof(struct nxclimsg_mousein_s), NX_SVRMSG_PRIO);
if (ret < 0)
{
gdbg("mq_send failed: %d\n", errno);
}
}
}
}

View File

@ -103,11 +103,21 @@ void nxsu_mouseinit(int x, int y)
void nxsu_mousereport(struct nxbe_window_s *wnd)
{
/* Give the keypad event only to the top child */
struct nxgl_point_s relpos;
/* Does this window support mouse callbacks? */
if (win->cb->mousein)
{
win->cb->mousein((NXWINDOW)wnd, &g_mpos, g_mbutton, wnd->arg);
/* Yes.. Does the mount position lie within the window? */
if (nxgl_rectinside(wnd->bounds, g_mpos))
{
/* Yes... Convert the mouse position to window relative coordinates */
nxgl_vectsubtract(&relpos, g_mpos, wnd->origin);
win->cb->mousein((NXWINDOW)wnd, &relpos, g_mbutton, wnd->arg);
}
}
}