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