+tElement *Widget_int_Create(tWidgetWin *Info, tElement *Parent, int ID, int Type, int Flags)
+{
+ if( Widget_GetElementById(Info, ID) )
+ return NULL;
+ if( Type >= NUM_ELETYPES ) {
+ return NULL;
+ }
+
+ _SysDebug("Widget Create #%i '%s' 0x%x",
+ ID, gaWM_WidgetTypes[Type]->Name, Flags);
+
+ // Create new element
+ tElement *new = calloc(sizeof(tElement), 1);
+ new->Window = Parent->Window;
+ new->ID = ID;
+ new->Type = Type;
+ new->Parent = Parent;
+ new->Flags = Flags;
+ new->PaddingT = 2;
+ new->PaddingB = 2;
+ new->PaddingL = 2;
+ new->PaddingR = 2;
+ new->CachedX = -1;
+
+ if( gaWM_WidgetTypes[Type]->Init )
+ gaWM_WidgetTypes[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;
+ }
+
+ return new;
+}
+
+void Widget_SetFocus(tWidgetWin *Info, tElement *Ele)
+{
+ // TODO: Callbacks
+
+ Info->FocusedElement = Ele;
+}
+
+