For example the following code trying to move a ListIconGadget to a container does not work on Linux:
Code: Select all
EnableExplicit
Define.i main, button, splitter
Global.i container1, container2, listicon
main = OpenWindow(#PB_Any, 0, 0, 800, 600, "test")
;Create a container
container1 = ContainerGadget(#PB_Any, 0, 0, 400, 600, #PB_Container_Raised)
;Erstelle ListIconGadget
listicon = ListIconGadget(#PB_Any, 5, 5, 390, 590, "Log", 100)
CloseGadgetList()
SetGadgetColor(container1, #PB_Gadget_BackColor, $ff0000)
;Create a second container
container2 = ContainerGadget(#PB_Any, 400, 0, 400, 600, #PB_Container_Raised)
CloseGadgetList()C
SetGadgetColor(container2, #PB_Gadget_BackColor, $00ff00)
Procedure SetGadgetParent(GadgetID.i, ToContainerID.i)
If (GadgetType(ToContainerID) = #PB_GadgetType_Container)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
Protected x.i = GadgetX(GadgetID), y.i = GadgetY(GadgetID)
;gtk_widget_reparent_(GadgetID(GadgetID), GadgetID(ContainerID))
;see http://docs.knobbits.org/local/libgtk2.0-doc/faq/x626.html
g_object_ref_(GadgetID(GadgetID))
gtk_container_remove_(gtk_widget_get_parent_(GadgetID(GadgetID)), GadgetID(GadgetID))
gtk_container_add_(GadgetID(ToContainerID), GadgetID(GadgetID))
g_object_unref_(GadgetID(GadgetID))
ResizeGadget(GadgetID, x, y, #PB_Ignore, #PB_Ignore)
CompilerCase #PB_OS_Windows
SetParent_(GadgetID(GadgetID), GadgetID(ToContainerID))
CompilerCase #PB_OS_MacOS
CompilerEndSelect
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
SetGadgetParent(listicon, container2)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
But if I encapsulate the ListIconGadget in a ContainerGadgert, it works without problems.
Code: Select all
EnableExplicit
Define.i main, button, splitter
Global.i container1, container2, listicon, listiconContainer
main = OpenWindow(#PB_Any, 0, 0, 800, 600, "test")
;Create a container
container1 = ContainerGadget(#PB_Any, 0, 0, 400, 600, #PB_Container_Raised)
;Create ListIconGadget
listiconContainer = ContainerGadget(#PB_Any, 5, 5, 390, 590, #PB_Container_BorderLess)
listicon = ListIconGadget(#PB_Any, 0, 0, 390, 590, "Log", 100)
CloseGadgetList()
CloseGadgetList()
SetGadgetColor(container1, #PB_Gadget_BackColor, $ff0000)
;Create a second container
container2 = ContainerGadget(#PB_Any, 400, 0, 400, 600, #PB_Container_Raised)
CloseGadgetList()
SetGadgetColor(container2, #PB_Gadget_BackColor, $00ff00)
AddGadgetItem(listicon, -1, "Pure Power")
Procedure SetGadgetParent(GadgetID.i, ToContainerID.i)
If (GadgetType(ToContainerID) = #PB_GadgetType_Container)
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
Protected x.i = GadgetX(GadgetID), y.i = GadgetY(GadgetID)
;gtk_widget_reparent_(GadgetID(GadgetID), GadgetID(ContainerID))
;see http://docs.knobbits.org/local/libgtk2.0-doc/faq/x626.html
g_object_ref_(GadgetID(GadgetID))
gtk_container_remove_(gtk_widget_get_parent_(GadgetID(GadgetID)), GadgetID(GadgetID))
gtk_container_add_(GadgetID(ToContainerID), GadgetID(GadgetID))
g_object_unref_(GadgetID(GadgetID))
ResizeGadget(GadgetID, x, y, #PB_Ignore, #PB_Ignore)
CompilerCase #PB_OS_Windows
SetParent_(GadgetID(GadgetID), GadgetID(ToContainerID))
CompilerCase #PB_OS_MacOS
CompilerEndSelect
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
SetGadgetParent(listiconContainer, container2)
AddWindowTimer(main, 0, 2000)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Timer
SetGadgetParent(listiconContainer, container1)
Swap container1, container2
EndSelect
ForEver
The english grammar is freeware, you can use it freely - But it's not Open Source, i.e. you can not change it or publish it in altered way.