#include <ipcmessages.h>
#include <stdio.h>
#include <wm.h>
+#include <wm_internals.h>
#define AXWIN_PORT 4101
tWindow **Windows;
};
+// === IMPORTS ===
+extern tWindow *gpWM_FocusedWindow; // Needed for _FocusWindow
// === PROTOTYPES ===
void IPC_Init(void);
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;
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;
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;
_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");