Skip to content

Commit ab0aa79

Browse files
committed
Fix GObject and GValue CType guessing
For some signals, their parameter types don't have CType fields, and when we try to guess them, the guessed CType values would be missing a pointer, causing issue #107 to happen. This commit fixes that. Fixes #107
1 parent 7d4d446 commit ab0aa79

File tree

7 files changed

+49
-27
lines changed

7 files changed

+49
-27
lines changed

gir/girgen/types/resolve.go

+18
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,12 @@ func Resolve(gen FileGenerator, typ gir.Type) *Resolved {
793793
var result *gir.TypeFindResult
794794

795795
// Try and dig out the CType if we have none.
796+
//
797+
// This doesn't always work though, so we'll record if we had an empty CType
798+
// so we can fix it later if we have to.
799+
var hadEmptyCType bool
796800
if typ.CType == "" {
801+
hadEmptyCType = true
797802
if result = Find(gen, typ.Name); result != nil {
798803
typ.CType = result.CType()
799804
}
@@ -829,6 +834,19 @@ func Resolve(gen FileGenerator, typ gir.Type) *Resolved {
829834
// Fill namespace.
830835
typ.Name = EnsureNamespace(gen.Namespace(), typ.Name)
831836

837+
// In some cases, the gir.Type doesn't have a CType, and when we fill in
838+
// our own, we wouldn't know if it's a pointer or not. Try to keep this
839+
// consistent.
840+
//
841+
// Particularly, we want to do this for issue #107. This also happens in
842+
// multiple other places though.
843+
switch typ.Name {
844+
case "GObject.Object", "GObject.Value", "GValue":
845+
if hadEmptyCType {
846+
typ.CType += "*"
847+
}
848+
}
849+
832850
// Resolve the unknown namespace that is GLib and primitive types.
833851
switch typ.Name {
834852
// TODO: ignore field

pkg/gio/v2/gio.go

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/gio/v2/gio_export.go

+8-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/gtk/v3/gtk.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,7 @@ import (
861861
// extern gboolean _gotk4_gtk3_TickCallback(GtkWidget*, GdkFrameClock*, gpointer);
862862
// extern gboolean _gotk4_gtk3_TextView_ConnectExtendSelection(gpointer, GtkTextExtendSelection, GtkTextIter*, GtkTextIter*, GtkTextIter*, guintptr);
863863
// extern gboolean _gotk4_gtk3_TextViewClass_extend_selection(GtkTextView*, GtkTextExtendSelection, GtkTextIter*, GtkTextIter*, GtkTextIter*);
864-
// extern gboolean _gotk4_gtk3_TextTag_ConnectEvent(gpointer, GObject, GdkEvent, GtkTextIter*, guintptr);
864+
// extern gboolean _gotk4_gtk3_TextTag_ConnectEvent(gpointer, GObject*, GdkEvent, GtkTextIter*, guintptr);
865865
// extern gboolean _gotk4_gtk3_TextTagClass_event(GtkTextTag*, GObject*, GdkEvent*, GtkTextIter*);
866866
// extern gboolean _gotk4_gtk3_TextCharPredicate(gunichar, gpointer);
867867
// extern gboolean _gotk4_gtk3_Switch_ConnectStateSet(gpointer, gboolean, guintptr);
@@ -951,7 +951,7 @@ import (
951951
// extern gboolean _gotk4_gtk3_CellAreaClass_focus(GtkCellArea*, GtkDirectionType);
952952
// extern gboolean _gotk4_gtk3_CellAreaClass_activate(GtkCellArea*, GtkCellAreaContext*, GtkWidget*, GdkRectangle*, GtkCellRendererState, gboolean);
953953
// extern gboolean _gotk4_gtk3_CellAllocCallback(GtkCellRenderer*, GdkRectangle*, GdkRectangle*, gpointer);
954-
// extern gboolean _gotk4_gtk3_AccelGroup_ConnectAccelActivate(gpointer, GObject, guint, GdkModifierType, guintptr);
954+
// extern gboolean _gotk4_gtk3_AccelGroup_ConnectAccelActivate(gpointer, GObject*, guint, GdkModifierType, guintptr);
955955
// extern gboolean _gotk4_gtk3_AboutDialog_ConnectActivateLink(gpointer, gchar*, guintptr);
956956
// extern gboolean _gotk4_gtk3_AboutDialogClass_activate_link(GtkAboutDialog*, gchar*);
957957
// extern GtkWidgetPath* _gotk4_gtk3_ContainerClass_get_path_for_child(GtkContainer*, GtkWidget*);
@@ -975,7 +975,7 @@ import (
975975
// extern GdkGLContext* _gotk4_gtk3_GLArea_ConnectCreateContext(gpointer, guintptr);
976976
// extern GType _gotk4_gtk3_ContainerClass_child_type(GtkContainer*);
977977
// extern GType _gotk4_gtk3_BuilderClass_get_type_from_name(GtkBuilder*, char*);
978-
// extern GObject _gotk4_gtk3_PrintOperation_ConnectCreateCustomWidget(gpointer, guintptr);
978+
// extern GObject* _gotk4_gtk3_PrintOperation_ConnectCreateCustomWidget(gpointer, guintptr);
979979
// extern AtkObject* _gotk4_gtk3_WidgetClass_get_accessible(GtkWidget*);
980980
// AtkObject* _gotk4_gtk3_Widget_virtual_get_accessible(void* fnptr, GtkWidget* arg0) {
981981
// return ((AtkObject* (*)(GtkWidget*))(fnptr))(arg0);

pkg/gtk/v3/gtk_export.go

+6-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/gtk/v4/gtk.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/gtk/v4/gtk_export.go

+9-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)