X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin3_src%2FWM%2Fwm.c;h=cc7e86ea96d20e22f924ff268ced3033e1c1dc82;hb=32980a36e515d1be2da1c7bf551070d4e972963e;hp=5f204af95820ad298fb0836cadf82e52fbfb70a6;hpb=6df6a4c5493bd641a028c435be54c4d087f12000;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin3_src/WM/wm.c b/Usermode/Applications/axwin3_src/WM/wm.c index 5f204af9..cc7e86ea 100644 --- a/Usermode/Applications/axwin3_src/WM/wm.c +++ b/Usermode/Applications/axwin3_src/WM/wm.c @@ -13,6 +13,7 @@ #include #include #include +#include // === IMPORTS === extern int Renderer_Menu_Init(void); @@ -24,6 +25,7 @@ extern int Renderer_RichText_Init(void); extern void IPC_SendWMMessage(tIPC_Client *Client, uint32_t Src, uint32_t Dst, int Msg, int Len, const void *Data); extern void IPC_SendReply(tIPC_Client *Client, uint32_t WinID, int MsgID, size_t Len, const void *Data); extern tWindow *IPC_int_GetWindow(tIPC_Client *Client, uint32_t ID); +extern void IPC_int_SetWindow(tIPC_Client *Client, uint32_t ID, tWindow *Window); // === GLOBALS === tWMRenderer *gpWM_Renderers; @@ -60,7 +62,16 @@ void WM_Initialise(void) void WM_RegisterRenderer(tWMRenderer *Renderer) { - // TODO: Catch out duplicates + // Catch out duplicates + for(tWMRenderer *r = gpWM_Renderers; r; r = r->Next ) { + if( r == Renderer ) { + return ; + } + if( strcmp(r->Name, Renderer->Name) == 0 ) { + return ; + } + } + Renderer->Next = gpWM_Renderers; gpWM_Renderers = Renderer; } @@ -136,7 +147,8 @@ void WM_DestroyWindow(tWindow *Window) Window->Parent->LastChild = prev; } // - Full invalidate - WM_Invalidate(Window, 1); + WM_Invalidate(Window, 0); + Window->Parent->Flags &= ~WINFLAG_CLEAN; // Mark parent as unclean, forcing redraw // - Remove from inheritance tree? @@ -167,6 +179,7 @@ void WM_DestroyWindow(tWindow *Window) free(Window->Title); free(Window->RenderBuffer); free(Window); + IPC_int_SetWindow(Window->Client, Window->ID, NULL); } tWindow *WM_GetWindowByID(tWindow *Requester, uint32_t ID) @@ -589,6 +602,7 @@ void WM_int_BlitWindow(tWindow *Window, int bForceReblit) bForceReblit = 1; } + // Draw cursor if( Window == gpWM_FocusedWindow && Window->CursorW ) { Video_FillRect(