/**
* \brief Initialise a window structure for the renderer
- * \param W Width of the new window
- * \param H Height of the new window
* \param Flags Flags for the window
* \return malloc()'d window structure, or NULL on error
- * \note Only the fields \a W and \a H need be filled in the window
- * structure, the rest will be filled by the caller.
+ * \note \a Flags is provided for convinience, the caller will
+ * set the copy in the window structure.
*/
- tWindow *(*CreateWindow)(int W, int H, int Flags);
+ tWindow *(*CreateWindow)(int Arg);
+
+ /**
+ * \brief Clean up any stored info
+ * \param Window Window being destroyed
+ */
+ void (*DestroyWindow)(tWindow *Window);
/**
* \brief Redraw a window on the screen
* \param Data Implementation defined data buffer
* \return Boolean failure (0: Handled, 1: Unhandled)
*/
- int (*HandleMessage)(tWindow *Window, int MessageID, int Length, void *Data);
+ int (*HandleMessage)(tWindow *Window, int MessageID, int Length, const void *Data);
+
+ int nIPCHandlers;
+
+ /**
+ * \brief IPC Message handler
+ */
+ int (*IPCHandlers[])(tWindow *Window, size_t Length, const void *Data);
};
extern void WM_RegisterRenderer(tWMRenderer *Renderer);
extern tWindow *WM_CreateWindowStruct(size_t ExtraBytes);
+extern int WM_SendIPCReply(tWindow *Window, int Message, size_t Length, const void *Data);
#endif