diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-07-27 14:48:43 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-07-27 14:48:43 +0200 |
| commit | c071e9b05144c0f372e4c375772e6887c032f7c0 (patch) | |
| tree | a47376e7b788594c0ed5d01232a5b9796643a278 /src | |
| parent | 1c1bab8d6b787756bd03baf958b9253dec6e56c3 (diff) | |
| download | box64-c071e9b05144c0f372e4c375772e6887c032f7c0.tar.gz box64-c071e9b05144c0f372e4c375772e6887c032f7c0.zip | |
Improved wrapping of libatk
Diffstat (limited to 'src')
| -rwxr-xr-x | src/include/gtkclass.h | 34 | ||||
| -rwxr-xr-x | src/tools/gtkclass.c | 84 | ||||
| -rwxr-xr-x | src/wrapped/wrappedatk.c | 9 | ||||
| -rwxr-xr-x | src/wrapped/wrappedatk_private.h | 44 |
4 files changed, 149 insertions, 22 deletions
diff --git a/src/include/gtkclass.h b/src/include/gtkclass.h index eb931ebf..0fe6dd30 100755 --- a/src/include/gtkclass.h +++ b/src/include/gtkclass.h @@ -471,6 +471,39 @@ typedef struct my_GDBusObjectManagerClientClass_s void* padding[8]; } my_GDBusObjectManagerClientClass_t; +typedef struct my_AtkObjectClass_s +{ + my_GObjectClass_t parent; + void* (* get_name) (void* accessible); + void* (* get_description) (void* accessible); + void* (*get_parent) (void* accessible); + int (* get_n_children) (void* accessible); + void* (* ref_child) (void* accessible, int i); + int (* get_index_in_parent) (void* accessible); + void* (* ref_relation_set) (void* accessible); + int (* get_role) (void* accessible); + int (* get_layer) (void* accessible); + int (* get_mdi_zorder) (void* accessible); + void* (* ref_state_set) (void* accessible); + void (* set_name) (void* accessible, void* name); + void (* set_description) (void* accessible, void* description); + void (* set_parent) (void* accessible, void* parent); + void (* set_role) (void* accessible, int role); + uint32_t (* connect_property_change_handler) (void* accessible, void* handler); + void (* remove_property_change_handler) (void* accessible, uint32_t handler_id); + void (* initialize) (void* accessible, void* data); + void (* children_changed) (void* accessible, uint32_t change_index, void* changed_child); + void (* focus_event) (void* accessible, int focus_in); + void (* property_change) (void* accessible, void* values); + void (* state_change) (void* accessible, void* name, int state_set); + void (*visible_data_changed) (void* accessible); + void (*active_descendant_changed) (void* accessible, void* child); + void* (*get_attributes) (void* accessible); + void* (*get_object_locale) (void* accessible); + void* pad1; +} my_AtkObjectClass_t; + + // GTypeValueTable typedef struct my_GTypeValueTable_s { void (*value_init) (void* value); @@ -553,6 +586,7 @@ GTKCLASS(GtkMenuShell2) \ GTKCLASS(GtkMenuBar2) \ GTKCLASS(MetaFrames2) \ GTKCLASS(GDBusObjectManagerClient) \ +GTKCLASS(AtkObject) \ #define GTKCLASS(A) void Set##A##ID(size_t id); GTKCLASSES() diff --git a/src/tools/gtkclass.c b/src/tools/gtkclass.c index 12c7797c..e271f87d 100755 --- a/src/tools/gtkclass.c +++ b/src/tools/gtkclass.c @@ -1415,6 +1415,90 @@ static void bridgeGtkMenuBar2Class(my_GtkMenuBar2Class_t* class) #undef SUPERGO +// ----- AtkObjectClass ------ +// wrapper x86 -> natives of callbacks +WRAPPER(AtkObject, get_name, void*, (void* accessible), 1, accessible); +WRAPPER(AtkObject, get_description, void*, (void* accessible), 1, accessible); +WRAPPER(AtkObject, get_parent, void*, (void* accessible), 1, accessible); +WRAPPER(AtkObject, get_n_children, int, (void* accessible), 1, accessible); +WRAPPER(AtkObject, ref_child, void*, (void* accessible, int i), 2, accessible, i); +WRAPPER(AtkObject, get_index_in_parent, int, (void* accessible), 1, accessible); +WRAPPER(AtkObject, ref_relation_set, void*, (void* accessible), 1, accessible); +WRAPPER(AtkObject, get_role, int, (void* accessible), 1, accessible); +WRAPPER(AtkObject, get_layer, int, (void* accessible), 1, accessible); +WRAPPER(AtkObject, get_mdi_zorder, int, (void* accessible), 1, accessible); +WRAPPER(AtkObject, ref_state_set, void*, (void* accessible), 1, accessible); +WRAPPER(AtkObject, set_name, void, (void* accessible, void* name), 2, accessible, name); +WRAPPER(AtkObject, set_description, void, (void* accessible, void* description), 2, accessible, description); +WRAPPER(AtkObject, set_parent, void, (void* accessible, void* parent), 2, accessible, parent); +WRAPPER(AtkObject, set_role, void, (void* accessible, int role), 2, accessible, role); +WRAPPER(AtkObject, connect_property_change_handler, uint32_t, (void* accessible, void* handler), 2, accessible, AddCheckBridge(my_bridge, vFpp, handler, 0, NULL)); +WRAPPER(AtkObject, remove_property_change_handler, void, (void* accessible, uint32_t handler_id), 2, accessible, handler_id); +WRAPPER(AtkObject, initialize, void, (void* accessible, void* data), 2, accessible, data); +WRAPPER(AtkObject, children_changed, void, (void* accessible, uint32_t change_index, void* changed_child), 3, accessible, change_index, changed_child); +WRAPPER(AtkObject, focus_event, void, (void* accessible, int focus_in), 2, accessible, focus_in); +WRAPPER(AtkObject, property_change, void, (void* accessible, void* values), 2, accessible, values); +WRAPPER(AtkObject, state_change, void, (void* accessible, void* name, int state_set), 3, accessible, name, state_set); +WRAPPER(AtkObject, visible_data_changed, void, (void* accessible), 1, accessible); +WRAPPER(AtkObject, active_descendant_changed, void, (void* accessible, void* child), 2, accessible, child); +WRAPPER(AtkObject, get_attributes, void*, (void* accessible), 1, accessible); +WRAPPER(AtkObject, get_object_locale, void*, (void* accessible), 1, accessible); + +#define SUPERGO() \ + GO(get_name, pFp); \ + GO(get_description, pFp); \ + GO(get_parent, pFp); \ + GO(get_n_children, iFp); \ + GO(ref_child, pFpi); \ + GO(get_index_in_parent, iFp); \ + GO(ref_relation_set, pFp); \ + GO(get_role, iFp); \ + GO(get_layer, iFp); \ + GO(get_mdi_zorder, iFp); \ + GO(ref_state_set, pFp); \ + GO(set_name, vFpp); \ + GO(set_description, vFpp); \ + GO(set_parent, vFpp); \ + GO(set_role, vFpi); \ + GO(connect_property_change_handler, uFpp); \ + GO(remove_property_change_handler, vFpu); \ + GO(initialize, vFpp); \ + GO(children_changed, vFpup); \ + GO(focus_event, vFpi); \ + GO(property_change, vFpp); \ + GO(state_change, vFppi); \ + GO(visible_data_changed, vFp); \ + GO(active_descendant_changed, vFpp); \ + GO(get_attributes, pFp); \ + GO(get_object_locale, pFp); \ + +// wrap (so bridge all calls, just in case) +static void wrapAtkObjectClass(my_AtkObjectClass_t* class) +{ + wrapGObjectClass(&class->parent); + #define GO(A, W) class->A = reverse_##A##_AtkObject (W, class->A) + SUPERGO() + #undef GO +} +// unwrap (and use callback if not a native call anymore) +static void unwrapAtkObjectClass(my_AtkObjectClass_t* class) +{ + unwrapGObjectClass(&class->parent); + #define GO(A, W) class->A = find_##A##_AtkObject (class->A) + SUPERGO() + #undef GO +} +// autobridge +static void bridgeAtkObjectClass(my_AtkObjectClass_t* class) +{ + bridgeGObjectClass(&class->parent); + #define GO(A, W) autobridge_##A##_AtkObject (W, class->A) + SUPERGO() + #undef GO +} + +#undef SUPERGO + // No more wrap/unwrap #undef WRAPPER #undef FIND diff --git a/src/wrapped/wrappedatk.c b/src/wrapped/wrappedatk.c index d3fe8a78..f96beff0 100755 --- a/src/wrapped/wrappedatk.c +++ b/src/wrapped/wrappedatk.c @@ -17,10 +17,16 @@ #include "box64context.h" #include "emu/x64emu_private.h" #include "myalign.h" +#include "gtkclass.h" const char* atkName = "libatk-1.0.so.0"; #define LIBNAME atk +typedef size_t (*LFv_t) (); + +#define ADDED_FUNCTIONS() \ +GO(atk_object_get_type, LFv_t) \ + #include "generated/wrappedatktypes.h" #include "wrappercallback.h" @@ -121,7 +127,8 @@ EXPORT uint32_t my_atk_add_key_event_listener(x64emu_t* emu, void* f, void* p) return -1; #define CUSTOM_INIT \ - getMy(lib); + getMy(lib); \ + SetAtkObjectID(my->atk_object_get_type()); \ #define CUSTOM_FINI \ freeMy(); diff --git a/src/wrapped/wrappedatk_private.h b/src/wrapped/wrappedatk_private.h index 855bba05..6bfd50ef 100755 --- a/src/wrapped/wrappedatk_private.h +++ b/src/wrapped/wrappedatk_private.h @@ -8,7 +8,7 @@ GO(atk_action_get_keybinding, pFpi) GO(atk_action_get_localized_name, pFpi) GO(atk_action_get_n_actions, iFp) GO(atk_action_get_name, pFpi) -GO(atk_action_get_type, iFv) +GO(atk_action_get_type, LFv) GO(atk_action_set_description, pFpi) GOM(atk_add_focus_tracker, uFEp) //GOM(atk_add_global_event_listener, uFEpp) @@ -22,20 +22,21 @@ GO(atk_component_get_layer, iFp) GO(atk_component_get_mdi_zorder, iFp) GO(atk_component_get_position, vFpppi) GO(atk_component_get_size, vFppp) -GO(atk_component_get_type, iFv) +GO(atk_component_get_type, LFv) GO(atk_component_grab_focus, iFp) GO(atk_component_ref_accessible_at_point, pFpiii) GO(atk_component_remove_focus_handler, vFpu) +GO(atk_component_scroll_to_point, iFpiii) GO(atk_component_set_extents, iFpiiiii) GO(atk_component_set_position, iFpiii) GO(atk_component_set_size, iFpii) -GO(atk_coord_type_get_type, iFv) +GO(atk_coord_type_get_type, LFv) //GO(atk_document_get_attributes, //GO(atk_document_get_attribute_value, //GO(atk_document_get_document, //GO(atk_document_get_document_type, //GO(atk_document_get_locale, -GO(atk_document_get_type, pFv) +GO(atk_document_get_type, LFv) //GO(atk_document_set_attribute_value, //GO(atk_editable_text_copy_text, //GO(atk_editable_text_cut_text, @@ -68,7 +69,7 @@ GO(atk_get_version, pFv) //GO(atk_hyperlink_get_type, //GO(atk_hyperlink_get_uri, //GO(atk_hyperlink_impl_get_hyperlink, -GO(atk_hyperlink_impl_get_type, pFv) +GO(atk_hyperlink_impl_get_type, LFv) //GO(atk_hyperlink_is_inline, //GO(atk_hyperlink_is_selected_link, //GO(atk_hyperlink_is_valid, @@ -76,35 +77,35 @@ GO(atk_hyperlink_impl_get_type, pFv) //GO(atk_hypertext_get_link, //GO(atk_hypertext_get_link_index, //GO(atk_hypertext_get_n_links, -GO(atk_hypertext_get_type, pFv) +GO(atk_hypertext_get_type, LFv) //GO(atk_image_get_image_description, //GO(atk_image_get_image_locale, //GO(atk_image_get_image_position, //GO(atk_image_get_image_size, -GO(atk_image_get_type, pFv) +GO(atk_image_get_type, LFv) //GO(atk_image_set_image_description, -GO(atk_implementor_get_type, iFv) +GO(atk_implementor_get_type, LFv) GO(atk_implementor_ref_accessible, pFp) -GO(atk_key_event_type_get_type, pFv) -GO(atk_layer_get_type, pFv) +GO(atk_key_event_type_get_type, LFv) +GO(atk_layer_get_type, LFv) //GO(atk_marshal_VOID__INT_INT, //GO(atk_marshal_VOID__INT_INT_INT_STRING, //GO(atk_marshal_VOID__INT_INT_STRING, //GO(atk_marshal_VOID__STRING_BOOLEAN, GO(atk_misc_get_instance, pFv) -GO(atk_misc_get_type, iFv) +GO(atk_misc_get_type, LFv) GO(atk_misc_threads_enter, vFp) GO(atk_misc_threads_leave, vFp) DATA(atk_misc_instance, sizeof(void*)) //GO(atk_no_op_object_factory_get_type, //GO(atk_no_op_object_factory_new, -GO(atk_no_op_object_get_type, pFv) +GO(atk_no_op_object_get_type, LFv) //GO(atk_no_op_object_new, GO(atk_object_add_relationship, iFpip) //GOM(atk_object_connect_property_change_handler, uFEpp) //GO(atk_object_factory_create_accessible, GO(atk_object_factory_get_accessible_type, iFp) -GO(atk_object_factory_get_type, iFv) +GO(atk_object_factory_get_type, LFv) //GO(atk_object_factory_invalidate, GO(atk_object_get_attributes, pFp) GO(atk_object_get_description, pFp) @@ -116,7 +117,7 @@ GO(atk_object_get_name, pFp) GO(atk_object_get_object_locale, pFp) GO(atk_object_get_parent, pFp) GO(atk_object_get_role, iFp) -GO(atk_object_get_type, iFv) +GO(atk_object_get_type, LFv) GO(atk_object_initialize, vFpp) GO(atk_object_notify_state_change, vFpii) GO(atk_object_ref_accessible_child, pFpi) @@ -162,12 +163,12 @@ GO(atk_remove_key_event_listener, vFu) GO(atk_role_for_name, iFp) GO(atk_role_get_localized_name, pFp) GO(atk_role_get_name, pFp) -GO(atk_role_get_type, iFv) +GO(atk_role_get_type, LFv) GO(atk_role_register, iFp) GO(atk_selection_add_selection, iFpi) GO(atk_selection_clear_selection, iFp) GO(atk_selection_get_selection_count, iFp) -GO(atk_selection_get_type, iFv) +GO(atk_selection_get_type, LFv) GO(atk_selection_is_child_selected, iFpi) GO(atk_selection_ref_selection, pFpi) GO(atk_selection_remove_selection, iFpi) @@ -251,16 +252,17 @@ GO(atk_selection_select_all_selection, iFp) //GO(atk_text_get_text_after_offset, //GO(atk_text_get_text_at_offset, //GO(atk_text_get_text_before_offset, -GO(atk_text_get_type, pFv) -GO(atk_text_range_get_type, pFv) +GO(atk_text_get_type, LFv) +GO(atk_text_range_get_type, LFv) //GO(atk_text_remove_selection, +GO(atk_text_scroll_substring_to_point, iFpiiiii) //GO(atk_text_set_caret_offset, //GO(atk_text_set_selection, -GO(atk_util_get_type, iFv) +GO(atk_util_get_type, LFv) //GO(atk_value_get_current_value, //GO(atk_value_get_maximum_value, //GO(atk_value_get_minimum_increment, //GO(atk_value_get_minimum_value, -GO(atk_value_get_type, pFv) +GO(atk_value_get_type, LFv) //GO(atk_value_set_current_value, -GO(atk_window_get_type, pFv) +GO(atk_window_get_type, LFv) |