X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin3_src%2FWM%2Fipc.c;h=46aff215dd9287e7995fd75dff7bbe16cef66d94;hb=b1488ae9beae34068d38d00e191b90ef0bf812f3;hp=da56149bde6ef88400eede4c98f829f4ca67b9f4;hpb=5057414aefd4d2c869fc9937b48dfdd1910fb573;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin3_src/WM/ipc.c b/Usermode/Applications/axwin3_src/WM/ipc.c index da56149b..46aff215 100644 --- a/Usermode/Applications/axwin3_src/WM/ipc.c +++ b/Usermode/Applications/axwin3_src/WM/ipc.c @@ -12,6 +12,7 @@ #include #include #include +#include #define AXWIN_PORT 4101 @@ -37,6 +38,8 @@ struct sIPC_Client tWindow **Windows; }; +// === IMPORTS === +extern tWindow *gpWM_FocusedWindow; // Needed for _FocusWindow // === PROTOTYPES === void IPC_Init(void); @@ -277,6 +280,22 @@ int IPC_Msg_SendMsg(tIPC_Client *Client, tAxWin_IPCMessage *Msg) return 0; } +int IPC_Msg_FocusWindow(tIPC_Client *Client, tAxWin_IPCMessage *Msg) +{ + tWindow *win; + + // Don't allow the focus to be changed unless the client has the focus + if(!gpWM_FocusedWindow) return 1; + if(gpWM_FocusedWindow->Client != Client) return 1; + + win = IPC_int_GetWindow(Client, Msg->Window); + if(!win) return 1; + + WM_FocusWindow(win); + + return 0; +} + int IPC_Msg_CreateWin(tIPC_Client *Client, tAxWin_IPCMessage *Msg) { tIPCMsg_CreateWin *info = (void*)Msg->Data; @@ -312,9 +331,24 @@ int IPC_Msg_CreateWin(tIPC_Client *Client, tAxWin_IPCMessage *Msg) return 0; } +int IPC_Msg_SetWindowTitle(tIPC_Client *Client, tAxWin_IPCMessage *Msg) +{ + tWindow *win; + + if( Msg->Size < 1 ) return -1; + if( Msg->Data[ Msg->Size-1 ] != '\0' ) return -1; + + win = IPC_int_GetWindow(Client, Msg->Window); + if(!win) return 1; + + WM_SetWindowTitle(win, Msg->Data); + + return 0; +} + int IPC_Msg_ShowWindow(tIPC_Client *Client, tAxWin_IPCMessage *Msg) { - tIPCMsg_ShowWindow *info = (void*)Msg->Data; + tIPCMsg_Boolean *info = (void*)Msg->Data; tWindow *win; if( Msg->Size < sizeof(*info) ) return -1; @@ -322,11 +356,25 @@ int IPC_Msg_ShowWindow(tIPC_Client *Client, tAxWin_IPCMessage *Msg) win = IPC_int_GetWindow(Client, Msg->Window); if(!win) return 1; - WM_ShowWindow(win, !!info->bShow); + WM_ShowWindow(win, !!info->Value); return 0; } +int IPC_Msg_DecorateWindow(tIPC_Client *Client, tAxWin_IPCMessage *Msg) +{ + tIPCMsg_Boolean *info = (void*)Msg->Data; + tWindow *win; + + if( Msg->Size < sizeof(*info) ) return -1; + + win = IPC_int_GetWindow(Client, Msg->Window); + if(!win) return 1; + + WM_DecorateWindow(win, !!info->Value); + return 0; +} + int IPC_Msg_SetWinPos(tIPC_Client *Client, tAxWin_IPCMessage *Msg) { tIPCMsg_SetWindowPos *info = (void*)Msg->Data; @@ -455,11 +503,28 @@ void IPC_Handle(const tIPC_Type *IPCType, const void *Ident, size_t MsgLen, tAxW _SysDebug(" IPC_Handle: IPCMSG_CREATEWIN"); rv = IPC_Msg_CreateWin(client, Msg); break; + // TODO: Destroy window + + // --- Set window title + case IPCMSG_SETWINTITLE: + _SysDebug(" IPC_Handle: IPCMSG_SETWINTITLE"); + rv = IPC_Msg_SetWindowTitle(client, Msg); + break; + + // --- Give a window focus + case IPCMSG_FOCUSWINDOW: + _SysDebug(" IPC_Handle: IPCMSG_FOCUSWINDOW"); + rv = IPC_Msg_FocusWindow(client, Msg); + break; // --- Show/Hide a window case IPCMSG_SHOWWINDOW: _SysDebug(" IPC_Handle: IPCMSG_SHOWWINDOW"); rv = IPC_Msg_ShowWindow(client, Msg); break; + case IPCMSG_DECORATEWINDOW: + _SysDebug(" IPC_Handle: IPCMSG_DECORATEWINDOW"); + rv = IPC_Msg_DecorateWindow(client, Msg); + break; // --- Move/Resize a window case IPCMSG_SETWINPOS: _SysDebug(" IPC_Handle: IPCMSG_SETWINPOS");