Ok, gefunden und wieder erinnert ...
Das GTK braucht etwas zeit das Fenster aufzubauen und die Daten zu hinterlegen (asynchrone Verarbeitung von GTK)
Code: Alles auswählen
;-TOP
Structure udtChildren
Level.i
Widget.i
Name.s
EndStructure
ImportC ""
gtk_widget_get_type(widget)
g_object_get_type(void)
EndImport
Procedure.s GetType(*Widget.gtkwidget)
type = g_object_get_type(*Widget)
Debug type
If type
name.s = PeekS(g_type_name_(type), -1, #PB_UTF8)
EndIf
ProcedureReturn name
EndProcedure
Procedure FindChild(Widget, Name.s)
Protected *Name, *child, *list.glist, *children.GList, *widget
*Name = gtk_widget_get_name_(Widget)
If *Name
If LCase(Name) = LCase(PeekS(*Name, -1, #PB_UTF8))
ProcedureReturn Widget
EndIf
EndIf
*list = gtk_container_get_children_(Widget)
If *list
*children = *list
While *children
*widget = FindChild(*children\data, name);
If *widget <> #Null
g_list_free_(*list)
ProcedureReturn *widget;
EndIf
*children = *children\next
Wend
g_list_free_(*list)
ProcedureReturn #Null
EndIf
*child = gtk_bin_get_child_(Widget)
If *child
ProcedureReturn FindChild(*child, name)
EndIf
ProcedureReturn #Null
EndProcedure
Procedure ListChildren(Widget, List Children.udtChildren(), Level = 0)
Protected *Name, *child, *list.glist, *children.glist
If Level = 0
ClearList(Children())
EndIf
*Name = gtk_widget_get_name_(Widget)
If *Name
AddElement(Children())
Children()\Level = Level
Children()\Widget = Widget
Children()\Name = PeekS(*Name, -1, #PB_UTF8)
EndIf
*list = gtk_container_get_children_(Widget)
If *list
*children = *list
While *children
ListChildren(*children\data, Children(), Level + 1);
*children = *children\next
Wend
g_list_free_(*list)
ProcedureReturn #Null
EndIf
*child = gtk_bin_get_child_(Widget);
If *child
*Name = gtk_widget_get_name_(Widget)
ProcedureReturn ListChildren(*child, Children(), Level + 1)
EndIf
ProcedureReturn #Null;
EndProcedure
;-Test
ImportC ""
gtk_widget_get_allocation(widget, allocation)
EndImport
If OpenWindow(0, 0, 0, 322, 220, "PanelGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
PanelGadget (0, 8, 8, 306, 203)
AddGadgetItem (0, -1, "Panel 1")
AddGadgetItem (0, -1,"Panel 2")
CloseGadgetList()
; GTK need some time
Delay(100)
;While WindowEvent() : Wend
Debug "TabHeight = " + GetGadgetAttribute(0,#PB_Panel_TabHeight)
Debug "ItemHeight = " + GetGadgetAttribute(0,#PB_Panel_ItemHeight)
Debug "ItemWidth = " + GetGadgetAttribute(0,#PB_Panel_ItemWidth)
Define NewList Childs.udtChildren()
Define rect.GdkRectangle
;ListChildren(WindowID(#Main), Childs())
ListChildren(GadgetID(0), Childs())
ForEach Childs()
Debug "Level " + Childs()\Level + ": " + Childs()\Name + " [" + Hex(Childs()\Widget) + "]"
rect\width = 0
rect\height = 0
gtk_widget_get_allocation(Childs()\Widget, @rect)
Debug "width = " + rect\width
Debug "height = " + rect\height
Next
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf