fix(gtk): ensure proper widget unparenting before reassignment
- commit
- b27dcc854745be3f0442564c4001cb8bee4c5cb8
- author
- bamen · · 2025-09-20 05:21 UTC
- parent
- 97c8607
- signature
- unsigned
1 file · +14 -0
M pkg/webkit/workspace_widgets_cgo.go +14 -0
| @@ -256,11 +256,25 @@ func NewPaned(orientation Orientation) uintptr { | |||
| 256 | 256 | ||
| 257 | 257 | // PanedSetStartChild assigns the start child of a GtkPaned. | |
| 258 | 258 | func PanedSetStartChild(paned uintptr, child uintptr) { | |
| 259 | + | if child != 0 { | |
| 260 | + | // Check if widget already has a parent and force unparent if needed | |
| 261 | + | parent := C.gtk_widget_get_parent((*C.GtkWidget)(unsafe.Pointer(child))) | |
| 262 | + | if parent != nil { | |
| 263 | + | C.gtk_widget_unparent((*C.GtkWidget)(unsafe.Pointer(child))) | |
| 264 | + | } | |
| 265 | + | } | |
| 259 | 266 | C.gtk_paned_set_start_child((*C.GtkPaned)(unsafe.Pointer(paned)), (*C.GtkWidget)(unsafe.Pointer(child))) | |
| 260 | 267 | } | |
| 261 | 268 | ||
| 262 | 269 | // PanedSetEndChild assigns the end child of a GtkPaned. | |
| 263 | 270 | func PanedSetEndChild(paned uintptr, child uintptr) { | |
| 271 | + | if child != 0 { | |
| 272 | + | // Check if widget already has a parent and force unparent if needed | |
| 273 | + | parent := C.gtk_widget_get_parent((*C.GtkWidget)(unsafe.Pointer(child))) | |
| 274 | + | if parent != nil { | |
| 275 | + | C.gtk_widget_unparent((*C.GtkWidget)(unsafe.Pointer(child))) | |
| 276 | + | } | |
| 277 | + | } | |
| 264 | 278 | C.gtk_paned_set_end_child((*C.GtkPaned)(unsafe.Pointer(paned)), (*C.GtkWidget)(unsafe.Pointer(child))) | |
| 265 | 279 | } | |
| 266 | 280 | ||
| @@ -256,11 +256,25 @@ func NewPaned(orientation Orientation) uintptr { | |||||
| 256 | 256 | ||||
| 257 | // PanedSetStartChild assigns the start child of a GtkPaned. | 257 | // PanedSetStartChild assigns the start child of a GtkPaned. | ||
| 258 | func PanedSetStartChild(paned uintptr, child uintptr) { | 258 | func PanedSetStartChild(paned uintptr, child uintptr) { | ||
| 259 | + | if child != 0 { | |||
| 260 | + | // Check if widget already has a parent and force unparent if needed | |||
| 261 | + | parent := C.gtk_widget_get_parent((*C.GtkWidget)(unsafe.Pointer(child))) | |||
| 262 | + | if parent != nil { | |||
| 263 | + | C.gtk_widget_unparent((*C.GtkWidget)(unsafe.Pointer(child))) | |||
| 264 | + | } | |||
| 265 | + | } | |||
| 259 | C.gtk_paned_set_start_child((*C.GtkPaned)(unsafe.Pointer(paned)), (*C.GtkWidget)(unsafe.Pointer(child))) | 266 | C.gtk_paned_set_start_child((*C.GtkPaned)(unsafe.Pointer(paned)), (*C.GtkWidget)(unsafe.Pointer(child))) | ||
| 260 | } | 267 | } | ||
| 261 | 268 | ||||
| 262 | // PanedSetEndChild assigns the end child of a GtkPaned. | 269 | // PanedSetEndChild assigns the end child of a GtkPaned. | ||
| 263 | func PanedSetEndChild(paned uintptr, child uintptr) { | 270 | func PanedSetEndChild(paned uintptr, child uintptr) { | ||
| 271 | + | if child != 0 { | |||
| 272 | + | // Check if widget already has a parent and force unparent if needed | |||
| 273 | + | parent := C.gtk_widget_get_parent((*C.GtkWidget)(unsafe.Pointer(child))) | |||
| 274 | + | if parent != nil { | |||
| 275 | + | C.gtk_widget_unparent((*C.GtkWidget)(unsafe.Pointer(child))) | |||
| 276 | + | } | |||
| 277 | + | } | |||
| 264 | C.gtk_paned_set_end_child((*C.GtkPaned)(unsafe.Pointer(paned)), (*C.GtkWidget)(unsafe.Pointer(child))) | 278 | C.gtk_paned_set_end_child((*C.GtkPaned)(unsafe.Pointer(paned)), (*C.GtkWidget)(unsafe.Pointer(child))) | ||
| 265 | } | 279 | } | ||
| 266 | 280 | ||||