+ if( new->Type < ciWM_NumWidgetTypes && gaWM_WidgetTypes[new->Type].Init )
+ gaWM_WidgetTypes[new->Type].Init(new);
+
+ // Add to parent's list
+ if(parent->LastChild)
+ parent->LastChild->NextSibling = new;
+ else
+ parent->FirstChild = new;
+ parent->LastChild = new;
+
+ // Add to info
+ {
+ tElement *ele, *prev = NULL;
+ for(ele = Info->ElementTable[new->ID % Info->TableSize]; ele; prev = ele, ele = ele->ListNext);
+ if(prev)
+ prev->ListNext = new;
+ else
+ Info->ElementTable[new->ID % Info->TableSize] = new;
+ }
+
+ Widget_UpdateMinDims(parent);
+}
+
+void Widget_SetFlags(tWidgetWin *Info, int Len, tWidgetMsg_SetFlags *Msg)
+{
+ tElement *ele;
+
+ if( Len < sizeof(tWidgetMsg_SetFlags) )
+ return ;
+
+ _SysDebug("Widget_SetFlags: (%i 0x%x 0x%x)", Msg->WidgetID, Msg->Value, Msg->Mask);
+
+ ele = Widget_GetElementById(Info, Msg->WidgetID);
+ if(!ele) return;
+
+ Msg->Value &= Msg->Mask;
+
+ ele->Flags &= ~Msg->Mask;
+ ele->Flags |= Msg->Value;
+}
+
+void Widget_SetSize(tWidgetWin *Info, int Len, tWidgetMsg_SetSize *Msg)
+{
+ tElement *ele;
+
+ if( Len < sizeof(tWidgetMsg_SetSize) )
+ return ;
+
+ ele = Widget_GetElementById(Info, Msg->WidgetID);
+ if(!ele) return ;
+
+ ele->FixedWith = Msg->Value;
+}
+
+void Widget_SetText(tWidgetWin *Info, int Len, tWidgetMsg_SetText *Msg)
+{
+ tElement *ele;
+
+ if( Len < sizeof(tWidgetMsg_SetText) + 1 )
+ return ;
+ if( Msg->Text[Len - sizeof(tWidgetMsg_SetText) - 1] != '\0' )
+ return ;
+
+ ele = Widget_GetElementById(Info, Msg->WidgetID);
+ if(!ele) return ;
+
+
+ if( ele->Type < ciWM_NumWidgetTypes && gaWM_WidgetTypes[ele->Type].UpdateText )
+ {
+ gaWM_WidgetTypes[ele->Type].UpdateText( ele, Msg->Text );
+ }
+// else
+// {
+// if(ele->Text) free(ele->Text);
+// ele->Text = strdup(Msg->Text);
+// }