about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-03-19 15:11:04 +0100
committerptitSeb <sebastien.chev@gmail.com>2022-03-19 15:11:04 +0100
commit5a563f1cc65a0e809d151132f9bdbb7f330cd5e6 (patch)
treec1dd62e1a6f69c6ab54eb172ad819ed33e5a2e33 /src
parent7c42cf2d95f7197f7982fb1fc27b54deeea14f2a (diff)
downloadbox64-5a563f1cc65a0e809d151132f9bdbb7f330cd5e6.tar.gz
box64-5a563f1cc65a0e809d151132f9bdbb7f330cd5e6.zip
More work on GTK wrapping (hterm seems to run fine now)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/include/gtkclass.h103
-rwxr-xr-xsrc/tools/bridge.c2
-rwxr-xr-xsrc/tools/gtkclass.c352
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrappedgtkx112types.h2
-rwxr-xr-xsrc/wrapped/wrappedgobject2.c39
-rwxr-xr-xsrc/wrapped/wrappedgtkx112.c311
-rwxr-xr-xsrc/wrapped/wrappedgtkx112_private.h16
-rwxr-xr-xsrc/wrapped/wrappedpango_private.h10
9 files changed, 630 insertions, 207 deletions
diff --git a/src/include/gtkclass.h b/src/include/gtkclass.h
index d70cb34b..17c4be21 100755
--- a/src/include/gtkclass.h
+++ b/src/include/gtkclass.h
@@ -224,6 +224,100 @@ typedef struct my_GtkWindowClass_s {
   void (*_gtk_reserved4) (void);
 } my_GtkWindowClass_t;
 
+typedef struct my_GtkButtonClass_s {
+  my_GtkBinClass_t parent_class;
+  void (* pressed)  (void *button);
+  void (* released) (void *button);
+  void (* clicked)  (void *button);
+  void (* enter)    (void *button);
+  void (* leave)    (void *button);
+  void (* activate) (void *button);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+} my_GtkButtonClass_t;
+
+typedef struct my_GtkToggleButtonClass_s {
+  my_GtkButtonClass_t parent_class;
+  void (* toggled) (void* toggle_button);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+} my_GtkToggleButtonClass_t;
+
+typedef struct my_GtkCheckButtonClass_s {
+  my_GtkToggleButtonClass_t parent_class;
+  void (* draw_indicator) (void* check_button, void* area);
+  void (*_gtk_reserved0) (void);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+} my_GtkCheckButtonClass_t;
+
+typedef struct my_GtkComboBoxClass_s {
+  my_GtkBinClass_t parent_class;
+  void (* changed)        (void* combo_box);
+  void*(* get_active_text)(void* combo_box);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+} my_GtkComboBoxClass_t;
+
+typedef struct my_GtkEntryClass_s {
+  my_GtkWidgetClass_t parent_class;
+  void (* populate_popup)   (void* entry, void* menu);
+  void (* activate)           (void* entry);
+  void (* move_cursor)        (void* entry, int step, int count, int extend_selection);
+  void (* insert_at_cursor)   (void* entry, void* str);
+  void (* delete_from_cursor) (void* entry, int type, int count);
+  void (* backspace)          (void* entry);
+  void (* cut_clipboard)      (void* entry);
+  void (* copy_clipboard)     (void* entry);
+  void (* paste_clipboard)    (void* entry);
+  void (* toggle_overwrite)   (void* entry);
+  void (* get_text_area_size) (void* entry, void* x, void* y, void* width, void* height);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+} my_GtkEntryClass_t;
+
+typedef struct my_GtkSpinButtonClass_s {
+  my_GtkEntryClass_t parent_class;
+  int  (*input)  (void* spin_button, void* new_value);
+  int  (*output) (void* spin_button);
+  void (*value_changed) (void* spin_button);
+  void (*change_value) (void* spin_button, int scroll);
+  void (*wrapped) (void* spin_button);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+} my_GtkSpinButtonClass_t;
+
+typedef struct my_GtkProgressClass_s {
+  my_GtkWidgetClass_t parent_class;
+  void (* paint)            (void* progress);
+  void (* update)           (void* progress);
+  void (* act_mode_enter)   (void* progress);
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+} my_GtkProgressClass_t;
+
+typedef struct my_GtkProgressBarClass_s {
+  my_GtkProgressClass_t parent_class;
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
+} my_GtkProgressBarClass_t;
+
+typedef struct my_GtkFrameClass_s {
+  my_GtkBinClass_t parent_class;
+  void (*compute_child_allocation) (void* frame, void* allocation);
+} my_GtkFrameClass_t;
+
 typedef struct my_MetaFramesClass_s
 {
   my_GtkWindowClass_t parent_class;
@@ -307,6 +401,15 @@ GTKCLASS(GtkBin)        \
 GTKCLASS(GtkWindow)     \
 GTKCLASS(GtkTable)      \
 GTKCLASS(GtkFixed)      \
+GTKCLASS(GtkButton)     \
+GTKCLASS(GtkComboBox)   \
+GTKCLASS(GtkToggleButton)\
+GTKCLASS(GtkCheckButton)\
+GTKCLASS(GtkEntry)      \
+GTKCLASS(GtkSpinButton) \
+GTKCLASS(GtkProgress)   \
+GTKCLASS(GtkProgressBar)\
+GTKCLASS(GtkFrame)      \
 GTKCLASS(MetaFrames)    \
 
 #define GTKCLASS(A) void Set##A##ID(size_t id);
diff --git a/src/tools/bridge.c b/src/tools/bridge.c
index 2574ddbd..b2e8d5ff 100755
--- a/src/tools/bridge.c
+++ b/src/tools/bridge.c
@@ -183,6 +183,8 @@ void* GetNativeFnc(uintptr_t fnc)
     Dl_info info;
     if(dladdr((void*)fnc, &info))
         return (void*)fnc;
+    if(!getProtection(fnc))
+        return NULL;
     // check if it's an indirect jump
     #define PK(a)       *(uint8_t*)(fnc+a)
     #define PK32(a)     *(uint32_t*)(fnc+a)
diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c
index af1cde5b..3f6ef0d3 100755
--- a/src/tools/gtkclass.c
+++ b/src/tools/gtkclass.c
@@ -702,6 +702,358 @@ static void bridgeMetaFramesClass(my_MetaFramesClass_t* class)
 
 #undef SUPERGO
 
+// ----- GtkButtonClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkButton, pressed, void,  (void* button), 1, button);
+WRAPPER(GtkButton, released, void, (void* button), 1, button);
+WRAPPER(GtkButton, clicked, void,  (void* button), 1, button);
+WRAPPER(GtkButton, enter, void,    (void* button), 1, button);
+WRAPPER(GtkButton, leave, void,    (void* button), 1, button);
+WRAPPER(GtkButton, activate, void, (void* button), 1, button);
+
+#define SUPERGO()               \
+    GO(pressed, vFp);           \
+    GO(released, vFp);          \
+    GO(clicked, vFp);           \
+    GO(enter, vFp);             \
+    GO(leave, vFp);             \
+    GO(activate, vFp);          \
+
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkButtonClass(my_GtkButtonClass_t* class)
+{
+    wrapGtkBinClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkButtonClass(my_GtkButtonClass_t* class)
+{   
+    unwrapGtkBinClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkButton (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkButtonClass(my_GtkButtonClass_t* class)
+{
+    bridgeGtkBinClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkComboBoxClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkComboBox, changed, void, (void* combo_box), 1, combo_box);
+WRAPPER(GtkComboBox, get_active_text, void*, (void* combo_box), 1, combo_box);
+
+#define SUPERGO()               \
+    GO(changed, vFp);           \
+    GO(get_active_text, pFp);   \
+
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkComboBoxClass(my_GtkComboBoxClass_t* class)
+{
+    wrapGtkBinClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkComboBox (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkComboBoxClass(my_GtkComboBoxClass_t* class)
+{   
+    unwrapGtkBinClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkComboBox (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkComboBoxClass(my_GtkComboBoxClass_t* class)
+{
+    bridgeGtkBinClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkComboBox (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkToggleButtonClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkToggleButton, toggled, void, (void* toggle_button), 1, toggle_button);
+
+#define SUPERGO()               \
+    GO(toggled, vFp);           \
+
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkToggleButtonClass(my_GtkToggleButtonClass_t* class)
+{
+    wrapGtkButtonClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkToggleButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkToggleButtonClass(my_GtkToggleButtonClass_t* class)
+{   
+    unwrapGtkButtonClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkToggleButton (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkToggleButtonClass(my_GtkToggleButtonClass_t* class)
+{
+    bridgeGtkButtonClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkToggleButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkCheckButtonClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkCheckButton, draw_indicator, void, (void* check_button, void* area), 2, check_button, area);
+
+#define SUPERGO()               \
+    GO(draw_indicator, vFpp);   \
+
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkCheckButtonClass(my_GtkCheckButtonClass_t* class)
+{
+    wrapGtkToggleButtonClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkCheckButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkCheckButtonClass(my_GtkCheckButtonClass_t* class)
+{   
+    unwrapGtkToggleButtonClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkCheckButton (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkCheckButtonClass(my_GtkCheckButtonClass_t* class)
+{
+    bridgeGtkToggleButtonClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkCheckButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkEntryClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkEntry, populate_popup, void,     (void* entry, void* menu), 2, entry, menu);
+WRAPPER(GtkEntry, activate, void,           (void* entry), 1, entry);
+WRAPPER(GtkEntry, move_cursor, void,        (void* entry, int step, int count, int extend_selection), 4, entry, step, count, extend_selection);
+WRAPPER(GtkEntry, insert_at_cursor, void,   (void* entry, void* str), 2, entry, str);
+WRAPPER(GtkEntry, delete_from_cursor, void, (void* entry, int type, int count), 3, entry, type, count);
+WRAPPER(GtkEntry, backspace, void,          (void* entry), 1, entry);
+WRAPPER(GtkEntry, cut_clipboard, void,      (void* entry), 1, entry);
+WRAPPER(GtkEntry, copy_clipboard, void,     (void* entry), 1, entry);
+WRAPPER(GtkEntry, paste_clipboard, void,    (void* entry), 1, entry);
+WRAPPER(GtkEntry, toggle_overwrite, void,   (void* entry), 1, entry);
+WRAPPER(GtkEntry, get_text_area_size, void, (void* entry, void* x, void* y, void* width, void* height), 5, entry, x, y, width, height);
+
+#define SUPERGO()                   \
+    GO(populate_popup, vFpp);       \
+    GO(activate, vFp);              \
+    GO(move_cursor, vFpiii);        \
+    GO(insert_at_cursor, vFp);      \
+    GO(delete_from_cursor, vFpii);  \
+    GO(backspace, vFp);             \
+    GO(cut_clipboard, vFp);         \
+    GO(copy_clipboard, vFp);        \
+    GO(paste_clipboard, vFp);       \
+    GO(toggle_overwrite, vFp);      \
+    GO(get_text_area_size, vFppppp);\
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkEntryClass(my_GtkEntryClass_t* class)
+{
+    wrapGtkWidgetClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkEntry (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkEntryClass(my_GtkEntryClass_t* class)
+{   
+    unwrapGtkWidgetClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkEntry (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkEntryClass(my_GtkEntryClass_t* class)
+{
+    bridgeGtkWidgetClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkEntry (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkSpinButtonClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkSpinButton, input, int,  (void* spin_button, void* new_value), 2, spin_button, new_value);
+WRAPPER(GtkSpinButton, output, int, (void* spin_button), 1, spin_button);
+WRAPPER(GtkSpinButton, value_changed, void, (void* spin_button), 1, spin_button);
+WRAPPER(GtkSpinButton, change_value, void, (void* spin_button, int scroll), 2, spin_button, scroll);
+WRAPPER(GtkSpinButton, wrapped, void, (void* spin_button), 1, spin_button);
+
+#define SUPERGO()           \
+    GO(input, iFpp);        \
+    GO(output, iFp);        \
+    GO(value_changed, vFp); \
+    GO(change_value, vFpi); \
+    GO(wrapped, vFp);       \
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkSpinButtonClass(my_GtkSpinButtonClass_t* class)
+{
+    wrapGtkEntryClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkSpinButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkSpinButtonClass(my_GtkSpinButtonClass_t* class)
+{   
+    unwrapGtkEntryClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkSpinButton (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkSpinButtonClass(my_GtkSpinButtonClass_t* class)
+{
+    bridgeGtkEntryClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkSpinButton (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkProgressClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkProgress, paint, void,          (void* progress), 1, progress);
+WRAPPER(GtkProgress, update, void,         (void* progress), 1, progress);
+WRAPPER(GtkProgress, act_mode_enter, void, (void* progress), 1, progress);
+
+#define SUPERGO()           \
+    GO(paint, vFp);         \
+    GO(update, vFp);        \
+    GO(act_mode_enter, vFp);\
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkProgressClass(my_GtkProgressClass_t* class)
+{
+    wrapGtkWidgetClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkProgress (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkProgressClass(my_GtkProgressClass_t* class)
+{   
+    unwrapGtkWidgetClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkProgress (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkProgressClass(my_GtkProgressClass_t* class)
+{
+    bridgeGtkWidgetClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkProgress (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkProgressBarClass ------
+// no wrapper x86 -> natives of callbacks
+
+#define SUPERGO()           \
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkProgressBarClass(my_GtkProgressBarClass_t* class)
+{
+    wrapGtkProgressClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkProgressBar (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkProgressBarClass(my_GtkProgressBarClass_t* class)
+{   
+    unwrapGtkProgressClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkProgressBar (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkProgressBarClass(my_GtkProgressBarClass_t* class)
+{
+    bridgeGtkProgressClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkProgressBar (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
+// ----- GtkFrameClass ------
+// wrapper x86 -> natives of callbacks
+WRAPPER(GtkFrame, compute_child_allocation, void, (void* frame, void* allocation), 2, frame, allocation);
+
+#define SUPERGO()                       \
+    GO(compute_child_allocation, vFpp); \
+
+// wrap (so bridge all calls, just in case)
+static void wrapGtkFrameClass(my_GtkFrameClass_t* class)
+{
+    wrapGtkBinClass(&class->parent_class);
+    #define GO(A, W) class->A = reverse_##A##_GtkFrame (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+// unwrap (and use callback if not a native call anymore)
+static void unwrapGtkFrameClass(my_GtkFrameClass_t* class)
+{   
+    unwrapGtkBinClass(&class->parent_class);
+    #define GO(A, W)   class->A = find_##A##_GtkFrame (class->A)
+    SUPERGO()
+    #undef GO
+}
+// autobridge
+static void bridgeGtkFrameClass(my_GtkFrameClass_t* class)
+{
+    bridgeGtkBinClass(&class->parent_class);
+    #define GO(A, W) autobridge_##A##_GtkFrame (W, class->A)
+    SUPERGO()
+    #undef GO
+}
+
+#undef SUPERGO
+
 // No more wrap/unwrap
 #undef WRAPPER
 #undef FIND
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 91688a6a..c05b8830 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -2552,6 +2552,8 @@ wrappedgtkx112:
   - gtk_widget_style_get_valist
 - uFupp:
   - gtk_timeout_add
+- pFppp:
+  - gtk_link_button_set_uri_hook
 - vFppiV:
   - gtk_list_store_insert_with_values
 - vFppup:
diff --git a/src/wrapped/generated/wrappedgtkx112types.h b/src/wrapped/generated/wrappedgtkx112types.h
index bb05d866..7616cb6b 100644
--- a/src/wrapped/generated/wrappedgtkx112types.h
+++ b/src/wrapped/generated/wrappedgtkx112types.h
@@ -21,6 +21,7 @@ typedef void (*vFppp_t)(void*, void*, void*);
 typedef void (*vFppV_t)(void*, void*, ...);
 typedef void (*vFppA_t)(void*, void*, va_list);
 typedef uint64_t (*uFupp_t)(uint64_t, void*, void*);
+typedef void* (*pFppp_t)(void*, void*, void*);
 typedef void (*vFppiV_t)(void*, void*, int64_t, ...);
 typedef void (*vFppup_t)(void*, void*, uint64_t, void*);
 typedef void (*vFpppp_t)(void*, void*, void*, void*);
@@ -67,6 +68,7 @@ typedef void* (*pFpipppppppi_t)(void*, int64_t, void*, void*, void*, void*, void
 	GO(gtk_tree_model_get_valist, vFppA_t) \
 	GO(gtk_widget_style_get_valist, vFppA_t) \
 	GO(gtk_timeout_add, uFupp_t) \
+	GO(gtk_link_button_set_uri_hook, pFppp_t) \
 	GO(gtk_list_store_insert_with_values, vFppiV_t) \
 	GO(gtk_action_group_add_actions, vFppup_t) \
 	GO(gtk_clipboard_request_contents, vFpppp_t) \
diff --git a/src/wrapped/wrappedgobject2.c b/src/wrapped/wrappedgobject2.c
index cf57f98d..043ef63e 100755
--- a/src/wrapped/wrappedgobject2.c
+++ b/src/wrapped/wrappedgobject2.c
@@ -21,7 +21,7 @@
 
 const char* gobject2Name = "libgobject-2.0.so.0";
 #define LIBNAME gobject2
-library_t *my_lib = NULL;
+static library_t *my_lib = NULL;
 
 typedef size_t(*LFv_t)(void);
 typedef void*(*pFL_t)(size_t);
@@ -57,7 +57,7 @@ void freeGobject2My(void* lib)
     //gobject2_my_t *my = (gobject2_my_t *)lib;
 }
 
-static int signal_cb(void* a, void* b, void* c, void* d)
+static int signal_cb(void* a, void* b, void* c, void* d, void* e)
 {
     // signal can have many signature... so first job is to find the data!
     // hopefully, no callback have more than 4 arguments...
@@ -79,14 +79,20 @@ static int signal_cb(void* a, void* b, void* c, void* d)
         sig = (my_signal_t*)d;
         i = 4;
     }
-    printf_log(LOG_DEBUG, "gobject2 Signal called, sig=%p, handler=%p, NArgs=%d\n", sig, (void*)sig->c_handler, i);
+    if(!sig && my_signal_is_valid(e)) {
+        sig = (my_signal_t*)e;
+        i = 5;
+        printf_log(LOG_DEBUG, "Warning, GObject2 signal callback with 5 args found, sig=%p!\n", sig);
+    }
+    printf_log(LOG_DEBUG, "gobject2 Signal called, sig=%p, handler=%p, NArgs=%d\n", sig, sig?(void*)sig->c_handler:NULL, i);
     switch(i) {
         case 1: return (int)RunFunction(my_context, sig->c_handler, 1, sig->data);
         case 2: return (int)RunFunction(my_context, sig->c_handler, 2, a, sig->data);
         case 3: return (int)RunFunction(my_context, sig->c_handler, 3, a, b, sig->data);
         case 4: return (int)RunFunction(my_context, sig->c_handler, 4, a, b, c, sig->data);
+        case 5: return (int)RunFunction(my_context, sig->c_handler, 5, a, b, c, d, sig->data);
     }
-    printf_log(LOG_NONE, "Warning, GObject2 signal callback but no data found!");
+    printf_log(LOG_NONE, "Warning, GObject2 signal callback but no data found!\n");
     return 0;
 }
 static int signal_cb_swapped(my_signal_t* sig, void* b, void* c, void* d)
@@ -210,12 +216,22 @@ EXPORT uintptr_t my_g_signal_connect_data(x64emu_t* emu, void* instance, void* d
     uintptr_t ret = 0;
     #define GO(A, B) if(strcmp((const char*)detailed, A)==0) ret = my->g_signal_connect_data(instance, detailed, (flags&2)?((void*)signal_cb_swapped_##B):((void*)signal_cb_##B), sig, signal_delete, flags);
     GO("query-tooltip", 6)  // GtkWidget
+    else GO("query_tooltip", 6)
     else GO("selection-get", 5) //GtkWidget
+    else GO("selection_get", 5)
     else GO("drag-data-get", 5) //GtkWidget
     else GO("drag-data-received", 8)    //GtkWidget
+    else GO("drag_data_received", 8)
     else GO("drag-drop", 6) //GtkWidget
+    else GO("drag_drop", 6)
     else GO("drag-motion", 6)   //GtkWidget
+    else GO("drag_motion", 6)
     else GO("expand-collapse-cursor-row", 5)    //GtkTreeView
+    else GO("expand_collapse_cursor_row", 5)
+    else GO("insert-text", 5)   // GtkEditable
+    else GO("insert_text", 5)
+    else GO("move-cursor", 5)   // GtkEntry
+    else GO("move_cursor", 5)
     else
         ret = my->g_signal_connect_data(instance, detailed, (flags&2)?((void*)signal_cb_swapped):((void*)signal_cb), sig, signal_delete, flags);
     #undef GO
@@ -264,7 +280,12 @@ GO(3)   \
 GO(4)   \
 GO(5)   \
 GO(6)   \
-GO(7)
+GO(7)   \
+GO(8)   \
+GO(9)   \
+GO(10)  \
+GO(11)  \
+GO(12)  \
 
 #define GO(A)   \
 static uintptr_t my_copy_fct_##A = 0;   \
@@ -625,7 +646,7 @@ EXPORT uint32_t my_g_signal_handlers_block_matched(x64emu_t* emu, void* instance
     gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
 
     // NOTE that I have no idea of the fnc signature!...
-    if (fnc) printf_log(LOG_INFO, "Warning, gobject g_signal_handlers_block_matched called with non null function \n");
+    if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handlers_block_matched called with non null function \n");
     fnc = findMarshalFct(fnc);  //... just in case
     return my->g_signal_handlers_block_matched(instance, mask, signal, detail, closure, fnc, data);
 }
@@ -635,7 +656,7 @@ EXPORT uint32_t my_g_signal_handlers_unblock_matched(x64emu_t* emu, void* instan
     gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
 
     // NOTE that I have no idea of the fnc signature!...
-    if (fnc) printf_log(LOG_INFO, "Warning, gobject g_signal_handlers_unblock_matched called with non null function \n");
+    if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handlers_unblock_matched called with non null function \n");
     fnc = findMarshalFct(fnc);  //... just in case
     return my->g_signal_handlers_unblock_matched(instance, mask, signal, detail, closure, fnc, data);
 }
@@ -645,7 +666,7 @@ EXPORT uint32_t my_g_signal_handlers_disconnect_matched(x64emu_t* emu, void* ins
     gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
 
     // NOTE that I have no idea of the fnc signature!...
-    if (fnc) printf_log(LOG_INFO, "Warning, gobject g_signal_handlers_disconnect_matched called with non null function \n");
+    if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handlers_disconnect_matched called with non null function \n");
     fnc = findMarshalFct(fnc);  //... just in case
     return my->g_signal_handlers_disconnect_matched(instance, mask, signal, detail, closure, fnc, data);
 }
@@ -655,7 +676,7 @@ EXPORT unsigned long my_g_signal_handler_find(x64emu_t* emu, void* instance, int
     gobject2_my_t *my = (gobject2_my_t*)my_lib->priv.w.p2;
 
     // NOTE that I have no idea of the fnc signature!...
-    if (fnc) printf_log(LOG_INFO, "Warning, gobject g_signal_handler_find called with non null function \n");
+    if (fnc) printf_log(LOG_DEBUG, "Warning, gobject g_signal_handler_find called with non null function \n");
     fnc = findMarshalFct(fnc);  //... just in case
     return my->g_signal_handler_find(instance, mask, signal, detail, closure, fnc, data);
 }
diff --git a/src/wrapped/wrappedgtkx112.c b/src/wrapped/wrappedgtkx112.c
index b288aa89..219d14fb 100755
--- a/src/wrapped/wrappedgtkx112.c
+++ b/src/wrapped/wrappedgtkx112.c
@@ -21,55 +21,27 @@
 
 const char* gtkx112Name = "libgtk-x11-2.0.so.0";
 static char* libname = NULL;
+static library_t* my_lib = NULL;
 #define LIBNAME gtkx112
 
 typedef size_t        (*LFv_t)(void);
-typedef void*         (*pFi_t)(int);
-typedef void          (*vFp_t)(void*);
 typedef int           (*iFp_t)(void*);
+typedef void          (*vFp_t)(void*);
 typedef void*         (*pFp_t)(void*);
 typedef double        (*dFp_t)(void*);
 typedef void*         (*pFL_t)(size_t);
-typedef int           (*iFip_t)(int, void*);
 typedef void*         (*pFip_t)(int, void*);
-typedef int           (*iFpp_t)(void*, void*);
-typedef size_t        (*LFLp_t)(size_t, void*);
-typedef void*         (*pFpp_t)(void*, void*);
-typedef void*         (*pFpi_t)(void*, int);
 typedef void*         (*pFpL_t)(void*, size_t);
-typedef void          (*vFpp_t)(void*, void*);
 typedef void          (*vFppi_t)(void*, void*, int);
-typedef void*         (*pFppi_t)(void*, void*, int32_t);
-typedef void          (*vFppA_t)(void*, void*, va_list);
 typedef int32_t       (*iFppp_t)(void*, void*, void*);
-typedef void          (*vFppp_t)(void*, void*, void*);
-typedef uint32_t      (*uFupp_t)(uint32_t, void*, void*);
+typedef void*         (*pFppi_t)(void*, void*, int32_t);
 typedef void          (*vFpipV_t)(void*, int, void*, ...);
-typedef int           (*iFpppp_t)(void*, void*, void*, void*);
-typedef void          (*vFpppp_t)(void*, void*, void*, void*);
-typedef void          (*vFppup_t)(void*, void*, uint32_t, void*);
 typedef unsigned long (*LFppppi_t)(void*, void*, void*, void*, int);
-typedef void          (*vFpippp_t)(void*, int, void*, void*, void*);
-typedef void          (*vFppppp_t)(void*, void*, void*, void*, void*);
 typedef void          (*vFpuipp_t)(void*, uint32_t, int, void*, void*);
-typedef void          (*vFppupp_t)(void*, void*, uint32_t, void*, void*);
-typedef uint32_t      (*uFiipppp_t)(int, int, void*, void*, void*, void*);
-typedef void          (*vFppippi_t)(void*, void*, int, void*, void*, int);
 typedef unsigned long (*LFpppppi_t)(void*, void*, void*, void*, void*, int);
-typedef int           (*iFpppppp_t)(void*, void*, void*, void*, void*, void*);
-typedef void          (*vFpuipuV_t)(void*, uint32_t, int, void*, uint32_t, ...);
-typedef int           (*iFppuppp_t)(void*, void*, uint32_t, void*, void*, void*);
-typedef void*         (*pFppppppi_t)(void*, void*, void*, void*, void*, void*, int);
-typedef void*         (*pFppppppp_t)(void*, void*, void*, void*, void*, void*, void*);
-typedef void*         (*pFpppppppi_t)(void*, void*, void*, void*, void*, void*, void*, int);
-typedef void          (*vFpppppuu_t)(void*, void*, void*, void*, void*, uint32_t, uint32_t);
-typedef unsigned long (*LFppppppii_t)(void*, void*, void*, void*, void*, void*, int32_t, int32_t);
-typedef void*         (*pFpippppppp_t)(void*, int, void*, void*, void*, void*, void*, void*, void*);
-typedef void*         (*pFpipppppppi_t)(void*, int, void*, void*, void*, void*, void*, void*, void*, int);
 
-#define SUPER() \
+#define ADDED_FUNCTIONS() \
     GO(gtk_object_get_type, LFv_t)              \
-    GO(gtk_object_set_data_full, vFpppp_t)      \
     GO(g_type_check_instance_cast, pFpL_t)      \
     GO(gtk_bin_get_type, LFv_t)                 \
     GO(gtk_widget_get_type, LFv_t)              \
@@ -81,65 +53,33 @@ typedef void*         (*pFpipppppppi_t)(void*, int, void*, void*, void*, void*,
     GO(gtk_window_get_type, LFv_t)              \
     GO(gtk_table_get_type, LFv_t)               \
     GO(gtk_fixed_get_type, LFv_t)               \
-    GO(gtk_type_class, pFL_t)                   \
-    GO(gtk_button_get_label, pFp_t)             \
-    GO(gtk_signal_connect_full, LFppppppii_t)   \
-    GO(gtk_dialog_add_button, pFppi_t)          \
-    GO(gtk_message_dialog_format_secondary_text, vFpp_t)    \
-    GO(gtk_message_dialog_format_secondary_markup, vFpp_t)  \
-    GO(gtk_init, vFpp_t)                        \
-    GO(gtk_init_check, iFpp_t)                  \
-    GO(gtk_init_with_args, iFpppppp_t)          \
-    GO(gtk_menu_attach_to_widget, vFppp_t)      \
-    GO(gtk_menu_popup, vFpppppuu_t)             \
-    GO(gtk_timeout_add, uFupp_t)                \
-    GO(gtk_clipboard_set_with_data, iFppuppp_t) \
-    GO(gtk_clipboard_set_with_owner, iFppuppp_t)\
-    GO(gtk_stock_set_translate_func, vFpppp_t)  \
-    GO(gtk_container_forall, vFppp_t)           \
-    GO(gtk_tree_view_set_search_equal_func, vFpppp_t)   \
-    GO(gtk_text_iter_backward_find_char, iFpppp_t)      \
-    GO(gtk_text_iter_forward_find_char, iFpppp_t)       \
-    GO(gtk_toolbar_append_item, pFppppppp_t)    \
-    GO(gtk_toolbar_prepend_item, pFppppppp_t)   \
-    GO(gtk_toolbar_insert_item, pFpppppppi_t)   \
-    GO(gtk_toolbar_append_element, pFpippppppp_t)       \
-    GO(gtk_toolbar_prepend_element, pFpippppppp_t)      \
-    GO(gtk_toolbar_insert_element, pFpipppppppi_t)      \
-    GO(gtk_toolbar_insert_stock, pFppppppi_t)   \
-    GO(gtk_tree_sortable_set_sort_func, vFpippp_t)      \
-    GO(gtk_tree_sortable_set_default_sort_func, vFpppp_t)\
-    GO(gtk_type_unique, LFLp_t)                 \
-    GO(gtk_spin_button_get_value, dFp_t)        \
-    GO(gtk_builder_connect_signals_full, vFppp_t)       \
+    GO(gtk_combo_box_get_type, LFv_t)           \
+    GO(gtk_toggle_button_get_type, LFv_t)       \
+    GO(gtk_check_button_get_type, LFv_t)        \
+    GO(gtk_frame_get_type, LFv_t)               \
+    GO(gtk_entry_get_type, LFv_t)               \
+    GO(gtk_spin_button_get_type, LFv_t)         \
+    GO(gtk_progress_get_type, LFv_t)            \
+    GO(gtk_progress_bar_get_type, LFv_t)        \
     GO(gtk_action_get_type, LFv_t)              \
-    GO(gtk_binding_entry_add_signall, vFpuipp_t)\
-    GO(gtk_binding_entry_add_signal, vFpuipuV_t)\
-    GO(gtk_container_foreach, vFppp_t)          \
-    GO(gtk_cell_layout_set_cell_data_func, vFppppp_t)   \
-    GO(g_module_close, iFp_t)                   \
-    GO(g_module_open, pFpi_t)                   \
-    GO(g_module_supported, LFv_t)               \
-    GO(g_module_symbol, iFppp_t)                \
-    GO(g_log, vFpipV_t)                         \
     GO(g_type_class_ref, pFL_t)                 \
     GO(g_type_class_unref, vFp_t)               \
+    GO(gtk_button_get_label, pFp_t)             \
+    GO(gtk_spin_button_get_value, dFp_t)        \
+    GO(gtk_binding_entry_add_signall, vFpuipp_t)\
     GO(g_signal_connect_object, LFppppi_t)      \
+    GO(gtk_dialog_add_button, pFppi_t)          \
     GO(g_signal_connect_data, LFpppppi_t)       \
-    GO(gtk_action_group_add_actions, vFppup_t)  \
-    GO(gtk_action_group_add_actions_full, vFppupp_t)    \
-    GO(gtk_tree_model_foreach, vFppp_t)         \
-    GO(gtk_clipboard_request_text, vFppp_t)     \
-    GO(gtk_clipboard_request_contents, vFpppp_t)\
-    GO(gtk_input_add_full, uFiipppp_t)          \
-    GO(gtk_list_store_set_valist, vFppA_t)      \
-    GO(gtk_widget_style_get_valist, vFppA_t)    \
-    GO(gtk_list_store_insert_with_valuesv, vFppippi_t)  \
     GO(gtk_list_store_newv, pFip_t)             \
     GO(gtk_tree_store_newv, pFip_t)             \
     GO(gtk_list_store_insert, vFppi_t)          \
-    GO(gtk_tree_model_get_valist, vFppA_t)      \
+    GO(g_module_close, iFp_t)                   \
+    GO(g_module_open, pFpi_t)                   \
+    GO(g_module_supported, LFv_t)               \
+    GO(g_module_symbol, iFppp_t)                \
+    GO(g_log, vFpipV_t)                         \
 
+#include "generated/wrappedgtkx112types.h"
 
 
 typedef struct gtkx112_my_s {
@@ -152,6 +92,7 @@ typedef struct gtkx112_my_s {
 
 void* getGtkx112My(library_t* lib)
 {
+    my_lib = lib;
     gtkx112_my_t* my = (gtkx112_my_t*)calloc(1, sizeof(gtkx112_my_t));
     #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A);
     SUPER()
@@ -165,14 +106,14 @@ void* getGtkx112My(library_t* lib)
 void freeGtkx112My(void* lib)
 {
     //gtkx112_my_t *my = (gtkx112_my_t *)lib;
+    my_lib = NULL;
 }
 
 static box64context_t* context = NULL;
 
 EXPORT uintptr_t my_gtk_signal_connect_full(x64emu_t* emu, void* object, void* name, void* c_handler, void* unsupported, void* data, void* closure, uint32_t signal, int after)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     if(!context)
         context = emu->context;
@@ -640,12 +581,44 @@ static void* findGtkCallbackMarshalFct(void* fct)
     return NULL;
 }
 
+// GtkLinkButtonUri ...
+#define GO(A)   \
+static uintptr_t my_GtkLinkButtonUri_fct_##A = 0;                       \
+static void my_GtkLinkButtonUri_##A(void* a, void* b, void* c)          \
+{                                                                       \
+    RunFunction(my_context, my_GtkLinkButtonUri_fct_##A, 3, a, b, c);   \
+}
+SUPER()
+#undef GO
+static void* find_GtkLinkButtonUri_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_GtkLinkButtonUri_fct_##A == (uintptr_t)fct) return my_GtkLinkButtonUri_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_GtkLinkButtonUri_fct_##A == 0) {my_GtkLinkButtonUri_fct_##A = (uintptr_t)fct; return my_GtkLinkButtonUri_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for gtk-2 GtkLinkButtonUri callback\n");
+    return NULL;
+}
+static void* reverse_GtkLinkButtonUri_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(CheckBridged(my_lib->priv.w.bridge, fct))
+        return (void*)CheckBridged(my_lib->priv.w.bridge, fct);
+    #define GO(A) if(my_GtkLinkButtonUri_##A == fct) return (void*)my_GtkLinkButtonUri_fct_##A;
+    SUPER()
+    #undef GO
+    return (void*)AddBridge(my_lib->priv.w.bridge, vFppp, fct, 0, NULL);
+}
+
 #undef SUPER
 
 EXPORT void my_gtk_dialog_add_buttons(x64emu_t* emu, void* dialog, void* first, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     void* btn = first;
     int n = 0;
@@ -658,8 +631,7 @@ EXPORT void my_gtk_dialog_add_buttons(x64emu_t* emu, void* dialog, void* first,
 
 EXPORT void my_gtk_message_dialog_format_secondary_text(x64emu_t* emu, void* dialog, void* fmt, void* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     char* buf = NULL;
     myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 2);
@@ -673,8 +645,7 @@ EXPORT void my_gtk_message_dialog_format_secondary_text(x64emu_t* emu, void* dia
 
 EXPORT void my_gtk_message_dialog_format_secondary_markup(x64emu_t* emu, void* dialog, void* fmt, void* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     char* buf = NULL;
     myStackAlign(emu, (const char*)fmt, b, emu->scratch, R_EAX, 2);
@@ -688,8 +659,7 @@ EXPORT void my_gtk_message_dialog_format_secondary_markup(x64emu_t* emu, void* d
 
 EXPORT void my_gtk_list_store_set_valist(x64emu_t* emu, void* list, void* iter, x64_va_list_t V)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     #ifdef CONVERT_VALIST
     CONVERT_VALIST(V);
@@ -701,8 +671,7 @@ EXPORT void my_gtk_list_store_set_valist(x64emu_t* emu, void* list, void* iter,
 
 EXPORT void my_gtk_list_store_set(x64emu_t* emu, void* list, void* iter, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     CREATE_VALIST_FROM_VAARG(b, emu->scratch, 2);
     my->gtk_list_store_set_valist(list, iter, VARARGS);
@@ -710,8 +679,7 @@ EXPORT void my_gtk_list_store_set(x64emu_t* emu, void* list, void* iter, uintptr
 
 EXPORT void my_gtk_widget_style_get_valist(x64emu_t* emu, void* widget, void* first, x64_va_list_t V)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     #ifdef CONVERT_VALIST
     CONVERT_VALIST(V);
@@ -723,8 +691,7 @@ EXPORT void my_gtk_widget_style_get_valist(x64emu_t* emu, void* widget, void* fi
 
 EXPORT void my_gtk_widget_style_get(x64emu_t* emu, void* widget, void* first, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     CREATE_VALIST_FROM_VAARG(b, emu->scratch, 2);
     my->gtk_widget_style_get_valist(widget, first, VARARGS);
@@ -732,8 +699,7 @@ EXPORT void my_gtk_widget_style_get(x64emu_t* emu, void* widget, void* first, ui
 
 EXPORT void* my_gtk_type_class(x64emu_t* emu, size_t type)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     void* class = my->gtk_type_class(type);
     return wrapCopyGTKClass(class, type);
@@ -741,8 +707,7 @@ EXPORT void* my_gtk_type_class(x64emu_t* emu, size_t type)
 
 EXPORT void my_gtk_init(x64emu_t* emu, void* argc, void* argv)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_init(argc, argv);
     my_checkGlobalGdkDisplay();
@@ -751,8 +716,7 @@ EXPORT void my_gtk_init(x64emu_t* emu, void* argc, void* argv)
 
 EXPORT int my_gtk_init_check(x64emu_t* emu, void* argc, void* argv)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     int ret = my->gtk_init_check(argc, argv);
     my_checkGlobalGdkDisplay();
@@ -762,8 +726,7 @@ EXPORT int my_gtk_init_check(x64emu_t* emu, void* argc, void* argv)
 
 EXPORT int my_gtk_init_with_args(x64emu_t* emu, void* argc, void* argv, void* param, void* entries, void* trans, void* error)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     int ret = my->gtk_init_with_args(argc, argv, param, entries, trans, error);
     my_checkGlobalGdkDisplay();
@@ -773,40 +736,35 @@ EXPORT int my_gtk_init_with_args(x64emu_t* emu, void* argc, void* argv, void* pa
 
 EXPORT void my_gtk_menu_attach_to_widget(x64emu_t* emu, void* menu, void* widget, void* f)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_menu_attach_to_widget(menu, widget, findMenuDetachFct(f));
 }
 
 EXPORT void my_gtk_menu_popup(x64emu_t* emu, void* menu, void* shell, void* item, void* f, void* data, uint32_t button, uint32_t time_)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_menu_popup(menu, shell, item, findMenuPositionFct(f), data, button, time_);
 }
 
 EXPORT uint32_t my_gtk_timeout_add(x64emu_t* emu, uint32_t interval, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_timeout_add(interval, findGtkFunctionFct(f), data);
 }
 
 EXPORT int my_gtk_clipboard_set_with_data(x64emu_t* emu, void* clipboard, void* target, uint32_t n, void* f_get, void* f_clear, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_clipboard_set_with_data(clipboard, target, n, findClipboadGetFct(f_get), findClipboadClearFct(f_clear), data);
 }
 
 EXPORT int my_gtk_clipboard_set_with_owner(x64emu_t* emu, void* clipboard, void* target, uint32_t n, void* f_get, void* f_clear, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_clipboard_set_with_owner(clipboard, target, n, findClipboadGetFct(f_get), findClipboadClearFct(f_clear), data);
 }
@@ -818,8 +776,7 @@ static void* my_translate_func(void* path, my_signal_t* sig)
 
 EXPORT void my_gtk_stock_set_translate_func(x64emu_t* emu, void* domain, void* f, void* data, void* notify)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my_signal_t *sig = new_mysignal(f, data, notify);
     my->gtk_stock_set_translate_func(domain, my_translate_func, sig, my_signal_delete);
@@ -827,114 +784,100 @@ EXPORT void my_gtk_stock_set_translate_func(x64emu_t* emu, void* domain, void* f
 
 EXPORT void my_gtk_container_forall(x64emu_t* emu, void* container, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_container_forall(container, findGtkCallbackFct(f), data);
 }
 
 EXPORT void my_gtk_tree_view_set_search_equal_func(x64emu_t* emu, void* tree_view, void* f, void* data, void* notify)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_tree_view_set_search_equal_func(tree_view, findGtkTreeViewSearchEqualFuncFct(f), data, findGDestroyNotifyFct(notify));
 }
 
 EXPORT int my_gtk_text_iter_backward_find_char(x64emu_t* emu, void* iter, void* f, void* data, void* limit)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_text_iter_backward_find_char(iter, findGtkTextCharPredicateFct(f), data, limit);
 }
 
 EXPORT int my_gtk_text_iter_forward_find_char(x64emu_t* emu, void* iter, void* f, void* data, void* limit)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_text_iter_forward_find_char(iter, findGtkTextCharPredicateFct(f), data, limit);
 }
 
 EXPORT void* my_gtk_toolbar_append_item(x64emu_t* emu, void* toolbar, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_toolbar_append_item(toolbar, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data);
 }
 
 EXPORT void* my_gtk_toolbar_prepend_item(x64emu_t* emu, void* toolbar, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_toolbar_prepend_item(toolbar, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data);
 }
 
 EXPORT void* my_gtk_toolbar_insert_item(x64emu_t* emu, void* toolbar, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data, int position)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_toolbar_insert_item(toolbar, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data, position);
 }
 
 EXPORT void* my_gtk_toolbar_append_element(x64emu_t* emu, void* toolbar, size_t type, void* widget, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_toolbar_append_element(toolbar, type, widget, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data);
 }
 
 EXPORT void* my_gtk_toolbar_prepend_element(x64emu_t* emu, void* toolbar, size_t type, void* widget, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_toolbar_prepend_element(toolbar, type, widget, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data);
 }
 
 EXPORT void* my_gtk_toolbar_insert_element(x64emu_t* emu, void* toolbar, size_t type, void* widget, void* text, void* tooltip_text, void* tooltip_private, void* icon, void* f, void* data, int position)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_toolbar_insert_element(toolbar, type, widget, text, tooltip_text, tooltip_private, icon, findToolbarFct(f), data, position);
 }
 
 EXPORT void* my_gtk_toolbar_insert_stock(x64emu_t* emu, void* toolbar, void* stock_id, void* tooltip_text, void* tooltip_private, void* f, void* data, int position)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_toolbar_insert_stock(toolbar, stock_id, tooltip_text, tooltip_private, findToolbarFct(f), data, position);
 }
 
 EXPORT void my_gtk_tree_sortable_set_sort_func(x64emu_t* emu, void* sortable, int id, void* f, void* data, void* notify)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_tree_sortable_set_sort_func(sortable, id, findGtkTreeIterCompareFuncFct(f), data, findGDestroyNotifyFct(notify));
 }
 
 EXPORT void my_gtk_tree_sortable_set_default_sort_func(x64emu_t* emu, void* sortable, void* f, void* data, void* notify)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_tree_sortable_set_default_sort_func(sortable, findGtkTreeIterCompareFuncFct(f), data, findGDestroyNotifyFct(notify));
 }
 
 EXPORT size_t my_gtk_type_unique(x64emu_t* emu, size_t parent, my_GtkTypeInfo_t* gtkinfo)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
-    return my->gtk_type_unique(parent, findFreeGtkTypeInfo(gtkinfo, parent));
+    return my->gtk_type_unique((void*)parent, findFreeGtkTypeInfo(gtkinfo, parent));
 }
 
 EXPORT unsigned long my_gtk_signal_connect(x64emu_t* emu, void* object, void* name, void* func, void* data)
@@ -944,16 +887,14 @@ EXPORT unsigned long my_gtk_signal_connect(x64emu_t* emu, void* object, void* na
 
 EXPORT void my_gtk_object_set_data_full(x64emu_t* emu, void* object, void* key, void* data, void* notify)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_object_set_data_full(object, key, data, findGDestroyNotifyFct(notify));
 }
 
 EXPORT float my_gtk_spin_button_get_value_as_float(x64emu_t* emu, void* spinner)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_spin_button_get_value(spinner);
 }
@@ -973,8 +914,7 @@ typedef struct dummy_gtk1_button_s {
 
 EXPORT void* my_gtk_type_check_object_cast(x64emu_t* emu, void* obj, size_t type)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     if(my->gtk1 && type==my->gtk_bin_get_type())
     {
@@ -997,8 +937,7 @@ EXPORT void* my_gtk_type_check_object_cast(x64emu_t* emu, void* obj, size_t type
 
 EXPORT void my_gtk_builder_connect_signals_full(x64emu_t* emu, void* builder, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_builder_connect_signals_full(builder, findBuilderConnectFct(f), data);
 }
@@ -1010,8 +949,7 @@ typedef struct my_GSList_s {
 
 EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32_t keyval, int mod, void* name, uint32_t n, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
     if(!n) {
         my->gtk_binding_entry_add_signal(binding, keyval, mod, name, 0);
         return;
@@ -1030,16 +968,14 @@ EXPORT void my_gtk_binding_entry_add_signal(x64emu_t* emu, void* binding, uint32
 
 EXPORT void my_gtk_container_foreach(x64emu_t* emu, void* container, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_container_foreach(container, findGtkCallbackFct(f), data);
 }
 
 EXPORT void my_gtk_cell_layout_set_cell_data_func(x64emu_t* emu, void* layout, void* cell, void* f, void* data, void* notify)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_cell_layout_set_cell_data_func(layout, cell, findGtkCellLayoutDataFuncFct(f), data, findGDestroyNotifyFct(notify));
 }
@@ -1093,8 +1029,7 @@ static void my_gtk_builder_connect_signals_custom(void* builder,
 
 EXPORT void my_gtk_builder_connect_signals(x64emu_t* emu, void* builder, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my_ConnectArgs_t args;
 
@@ -1119,8 +1054,7 @@ typedef struct my_GtkActionEntry_s {
 
 EXPORT void my_gtk_action_group_add_actions(x64emu_t* emu, void* action_group, my_GtkActionEntry_t* entries, uint32_t n, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my_GtkActionEntry_t myentries[n];
     memcpy(myentries, entries, n*sizeof(my_GtkActionEntry_t));
@@ -1131,8 +1065,7 @@ EXPORT void my_gtk_action_group_add_actions(x64emu_t* emu, void* action_group, m
 
 EXPORT void my_gtk_action_group_add_actions_full(x64emu_t* emu, void* action_group, my_GtkActionEntry_t* entries, uint32_t n, void* data, void* destroy)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my_GtkActionEntry_t myentries[n];
     memcpy(myentries, entries, n*sizeof(my_GtkActionEntry_t));
@@ -1143,16 +1076,14 @@ EXPORT void my_gtk_action_group_add_actions_full(x64emu_t* emu, void* action_gro
 
 EXPORT void my_gtk_tree_model_foreach(x64emu_t* emu, void* model, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_tree_model_foreach(model, findGtkTreeModelForeachFuncFct(f), data);
 }
 
 EXPORT void my_gtk_clipboard_request_contents(x64emu_t* emu, void* clipboard, void* target, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_clipboard_request_contents(clipboard, target, findGtkClipboardReceivedFuncFct(f), data);
 }
@@ -1160,24 +1091,21 @@ EXPORT void my_gtk_clipboard_request_contents(x64emu_t* emu, void* clipboard, vo
 
 EXPORT void my_gtk_clipboard_request_text(x64emu_t* emu, void* clipboard, void* f, void* data)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     my->gtk_clipboard_request_text(clipboard, findGtkClipboardTextReceivedFuncFct(f), data);
 }
 
 EXPORT uint32_t my_gtk_input_add_full(x64emu_t* emu, int source, int condition, void* func, void* marshal, void* data, void* destroy)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     return my->gtk_input_add_full(source, condition, findGdkInputFunctionFct(func), findGtkCallbackMarshalFct(marshal), data, findGDestroyNotifyFct(destroy));
 }
 
 EXPORT void my_gtk_list_store_insert_with_values(x64emu_t* emu, void* store, void* iter, int pos, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     CREATE_VALIST_FROM_VAARG(b, emu->scratch, 3);
     // not 100% exact, but better than nothing
@@ -1189,8 +1117,7 @@ EXPORT void my_gtk_list_store_insert_with_values(x64emu_t* emu, void* store, voi
 
 EXPORT void* my_gtk_list_store_new(x64emu_t* emu, int n, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     uintptr_t a[n];
     for(int i=0; i<n; ++i)
@@ -1200,8 +1127,7 @@ EXPORT void* my_gtk_list_store_new(x64emu_t* emu, int n, uintptr_t* b)
 
 EXPORT void* my_gtk_tree_store_new(x64emu_t* emu, int n, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     uintptr_t a[n];
     for(int i=0; i<n; ++i)
@@ -1211,8 +1137,7 @@ EXPORT void* my_gtk_tree_store_new(x64emu_t* emu, int n, uintptr_t* b)
 
 EXPORT void my_gtk_tree_model_get_valist(x64emu_t* emu, void* tree, void* iter, x64_va_list_t V)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     #ifdef CONVERT_VALIST
     CONVERT_VALIST(V);
@@ -1224,13 +1149,20 @@ EXPORT void my_gtk_tree_model_get_valist(x64emu_t* emu, void* tree, void* iter,
 
 EXPORT void my_gtk_tree_model_get(x64emu_t* emu, void* tree, void* iter, uintptr_t* b)
 {
-    library_t * lib = GetLibInternal(libname);
-    gtkx112_my_t *my = (gtkx112_my_t*)lib->priv.w.p2;
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
 
     CREATE_VALIST_FROM_VAARG(b, emu->scratch, 2);
     my->gtk_tree_model_get_valist(tree, iter, VARARGS);
 }
 
+EXPORT void* my_gtk_link_button_set_uri_hook(x64emu_t* emu, void* f, void* data, void* d)
+{
+    gtkx112_my_t *my = (gtkx112_my_t*)my_lib->priv.w.p2;
+
+    void* ret = my->gtk_link_button_set_uri_hook(find_GtkLinkButtonUri_Fct(f), data, findGDestroyNotifyFct(d));
+    return reverse_GtkLinkButtonUri_Fct(ret);
+}
+
 #define PRE_INIT    \
     if(box64_nogtk) \
         return -1;
@@ -1249,6 +1181,15 @@ EXPORT void my_gtk_tree_model_get(x64emu_t* emu, void* tree, void* iter, uintptr
     SetGtkWindowID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_window_get_type());     \
     SetGtkTableID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_table_get_type());       \
     SetGtkFixedID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_fixed_get_type());       \
+    SetGtkButtonID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_button_get_type());     \
+    SetGtkComboBoxID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_combo_box_get_type());\
+    SetGtkToggleButtonID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_toggle_button_get_type());\
+    SetGtkCheckButtonID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_check_button_get_type());\
+    SetGtkEntryID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_entry_get_type());       \
+    SetGtkSpinButtonID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_spin_button_get_type());\
+    SetGtkProgressID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_progress_get_type()); \
+    SetGtkProgressBarID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_progress_bar_get_type());\
+    SetGtkFrameID(((gtkx112_my_t*)lib->priv.w.p2)->gtk_frame_get_type());       \
     lib->priv.w.needed = 2;                                                     \
     lib->priv.w.neededlibs = (char**)calloc(lib->priv.w.needed, sizeof(char*)); \
     lib->priv.w.neededlibs[0] = strdup("libgdk-x11-2.0.so.0");                  \
diff --git a/src/wrapped/wrappedgtkx112_private.h b/src/wrapped/wrappedgtkx112_private.h
index dbb5b53a..b896ea16 100755
--- a/src/wrapped/wrappedgtkx112_private.h
+++ b/src/wrapped/wrappedgtkx112_private.h
@@ -1173,7 +1173,7 @@ GO(gtk_hbutton_box_new, pFv)
 GO(gtk_hbutton_box_set_layout_default, vFi)
 GO(gtk_hbutton_box_set_spacing_default, vFi)
 GO(gtk_hpaned_get_type, LFv)
-//GO(gtk_hpaned_new, 
+GO(gtk_hpaned_new, pFv)
 GO(gtk_hruler_get_type, LFv)
 //GO(gtk_hruler_new, 
 GO(gtk_hscale_get_type, LFv)
@@ -1529,13 +1529,13 @@ GO(gtk_layout_new, pFpp)
 //GO(gtk_layout_set_vadjustment, 
 //GO(gtk_layout_thaw, 
 GO(gtk_link_button_get_type, LFv)
-//GO(gtk_link_button_get_uri, 
-//GO(gtk_link_button_get_visited, 
-//GO(gtk_link_button_new, 
-//GO(gtk_link_button_new_with_label, 
-//GO(gtk_link_button_set_uri, 
-//GO(gtk_link_button_set_uri_hook, 
-//GO(gtk_link_button_set_visited, 
+GO(gtk_link_button_get_uri, pFp)
+GO(gtk_link_button_get_visited, iFp)
+GO(gtk_link_button_new, pFp)
+GO(gtk_link_button_new_with_label, pFpp)
+GO(gtk_link_button_set_uri, vFpp)
+GOM(gtk_link_button_set_uri_hook, pFEppp)
+GO(gtk_link_button_set_visited, vFpi)
 GO(gtk_list_append_items, vFpp)
 GO(gtk_list_child_position, iFpp)
 GO(gtk_list_clear_items, vFpii)
diff --git a/src/wrapped/wrappedpango_private.h b/src/wrapped/wrappedpango_private.h
index 32b1c3d2..b8e5415f 100755
--- a/src/wrapped/wrappedpango_private.h
+++ b/src/wrapped/wrappedpango_private.h
@@ -399,12 +399,12 @@ GO(pango_tab_array_resize, vFpi)
 GO(pango_tab_array_set_tab, vFpiii)
 GO(pango_trim_string, pFp)
 GO(pango_underline_get_type, iFv)
-//GO(pango_unichar_direction, 
+GO(pango_unichar_direction, iFu)
 GO(pango_units_from_double, iFd)
 GO(pango_units_to_double, dFi)
-//GO(pango_variant_get_type, 
-//GO(pango_version, 
-//GO(pango_version_check, 
-//GO(pango_version_string, 
+GO(pango_variant_get_type, pFv)
+GO(pango_version, iFv)
+GO(pango_version_check, pFiii)
+GO(pango_version_string, pFv)
 GO(pango_weight_get_type, iFv)
 GO(pango_wrap_mode_get_type, iFv)