NxWM: Add a missing part of the message blocking logic

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4748 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo
2012-05-19 01:01:00 +00:00
parent 2acf00c2cd
commit dd202a4aa7
23 changed files with 122 additions and 78 deletions
+4 -1
View File
@@ -94,13 +94,15 @@
*
* Input Parameters:
* wnd - The window to be blocked
* arg - An argument that will accompany the block messages (This is arg2
* in the blocked callback).
*
* Return:
* OK on success; ERROR on failure with errno set appropriately
*
****************************************************************************/
int nx_block(NXWINDOW hwnd)
int nx_block(NXWINDOW hwnd, FAR void *arg)
{
FAR struct nxbe_window_s *wnd = (FAR struct nxbe_window_s *)hwnd;
struct nxsvrmsg_blocked_s outmsg;
@@ -132,6 +134,7 @@ int nx_block(NXWINDOW hwnd)
outmsg.msgid = NX_SVRMSG_BLOCKED;
outmsg.wnd = wnd;
outmsg.arg = arg;
/* Send the window message via nxmu_sendserver (vs. nxmu_sendwindow) so
* that it will not be blocked.
+1 -1
View File
@@ -245,7 +245,7 @@ int nx_eventhandler(NXHANDLE handle)
DEBUGASSERT(wnd);
if (wnd->cb->blocked)
{
wnd->cb->blocked((NXWINDOW)wnd, wnd->arg);
wnd->cb->blocked((NXWINDOW)wnd, wnd->arg, blocked->arg);
}
}
break;
+2
View File
@@ -258,6 +258,7 @@ struct nxclimsg_blocked_s
{
uint32_t msgid; /* NX_CLIMSG_BLOCKED */
FAR struct nxbe_window_s *wnd; /* The window that is blocked */
FAR void *arg; /* User argument */
};
/* Client-to-Server Message Structures **************************************/
@@ -299,6 +300,7 @@ struct nxsvrmsg_blocked_s
{
uint32_t msgid; /* NX_SVRMSG_BLOCKED */
FAR struct nxbe_window_s *wnd; /* The window that is blocked */
FAR void *arg; /* User argument */
};
/* This message requests the server to create a new window */
+3 -2
View File
@@ -154,13 +154,14 @@ static inline void nxmu_shutdown(FAR struct nxfe_state_s *fe)
* Name: nxmu_blocked
****************************************************************************/
static inline void nxmu_blocked(FAR struct nxbe_window_s *wnd)
static inline void nxmu_blocked(FAR struct nxbe_window_s *wnd, FAR void *arg)
{
struct nxclimsg_blocked_s outmsg;
int ret;
outmsg.msgid = NX_CLIMSG_BLOCKED;
outmsg.wnd = wnd;
outmsg.arg = arg;
ret = nxmu_sendclient(wnd->conn, &outmsg, sizeof(struct nxclimsg_blocked_s));
if (ret < 0)
@@ -380,7 +381,7 @@ int nx_runinstance(FAR const char *mqname, FAR NX_DRIVERTYPE *dev)
case NX_SVRMSG_BLOCKED: /* Block messsages to a window */
{
FAR struct nxsvrmsg_blocked_s *blocked = (FAR struct nxsvrmsg_blocked_s *)buffer;
nxmu_blocked(blocked->wnd);
nxmu_blocked(blocked->wnd, blocked->arg);
}
break;