Skip to content

Commit

Permalink
fix issue about passing cgo pointers
Browse files Browse the repository at this point in the history
related to #266
  • Loading branch information
mattn committed May 1, 2016
1 parent ed2d2dd commit f8831fa
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 8 deletions.
1 change: 0 additions & 1 deletion docs
Submodule docs deleted from e665be
2 changes: 1 addition & 1 deletion example/demo/demo.go
Expand Up @@ -46,7 +46,7 @@ func authors() []string {
}

func main() {
gtk.Init(nil)
gtk.Init(&os.Args)

window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
window.SetPosition(gtk.WIN_POS_CENTER)
Expand Down
13 changes: 8 additions & 5 deletions gtk/gtk.go
Expand Up @@ -221,18 +221,20 @@ func SetLocale() {
func Init(args *[]string) {
if args != nil {
var argc C.int = C.int(len(*args))
cargs := make([]*C.char, argc)
ptr := uintptr(C.malloc(C.size_t(int(unsafe.Sizeof((*C.char)(nil))) * len(*args))))
cargs := (***C.char)(unsafe.Pointer(ptr))
for i, arg := range *args {
cargs[i] = C.CString(arg)
(*(**[1 << 22]*C.char)(unsafe.Pointer(&cargs)))[i] = C.CString(arg)
}
C._gtk_init(unsafe.Pointer(&argc), unsafe.Pointer(&cargs))
C.gtk_init(&argc, cargs)
goargs := make([]string, argc)
for i := 0; i < int(argc); i++ {
goargs[i] = C.GoString(cargs[i])
goargs[i] = C.GoString((*(**[1 << 22]*C.char)(unsafe.Pointer(&cargs)))[i])
}
for i := 0; i < int(argc); i++ {
cfree(cargs[i])
cfree(((*(**[1 << 22]*C.char)(unsafe.Pointer(&cargs)))[i]))
}
C.free(unsafe.Pointer(ptr))
*args = goargs
} else {
C._gtk_init(nil, nil)
Expand Down Expand Up @@ -1838,6 +1840,7 @@ func NewImageFromIconName(stock_id string, size IconSize) *Image {
defer cfree(ptr)
return &Image{Misc{Widget{C.gtk_image_new_from_icon_name(gstring(ptr), C.GtkIconSize(size))}}}
}

// gtk_image_new_from_gicon

func (v *Image) GetPixbuf() *gdkpixbuf.Pixbuf {
Expand Down
2 changes: 1 addition & 1 deletion gtk/gtk.go.h
Expand Up @@ -18,7 +18,7 @@
#include <stdio.h>
#include <pthread.h>

static void _gtk_init(void* argc, void* argv) {
static void _gtk_init(int* argc, char*** argv) {
gtk_init((int*)argc, (char***)argv);
}

Expand Down

0 comments on commit f8831fa

Please sign in to comment.