mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-16 09:21:36 +00:00
189 lines
6.6 KiB
C++
189 lines
6.6 KiB
C++
#include "compat.h"
|
|
#include <dlfcn.h>
|
|
|
|
#define dynamicgtkfoo__
|
|
#include "dynamicgtk.h"
|
|
|
|
static void *handle = NULL;
|
|
struct _dynamicgtksyms dynamicgtksyms;
|
|
|
|
#define GETDLSYM(x) { \
|
|
dynamicgtksyms.x = (x ## _ptr) dlsym(handle, (failsym = (const char *)#x)); \
|
|
if (!dynamicgtksyms.x ) { err = 1; break; } \
|
|
}
|
|
|
|
int32_t dynamicgtk_init(void)
|
|
{
|
|
int32_t err = 0;
|
|
const char *failsym = NULL;
|
|
const char *gtk_shared_object;
|
|
|
|
if (handle) return 1;
|
|
|
|
#if defined __OpenBSD__
|
|
gtk_shared_object = "libgtk-x11-2.0.so";
|
|
#else
|
|
gtk_shared_object = "libgtk-x11-2.0.so.0";
|
|
#endif
|
|
|
|
handle = dlopen(gtk_shared_object, RTLD_NOW|RTLD_GLOBAL);
|
|
if (!handle) return -1;
|
|
|
|
memset(&dynamicgtksyms, 0, sizeof(dynamicgtksyms));
|
|
|
|
do
|
|
{
|
|
GETDLSYM(g_free)
|
|
GETDLSYM(g_object_get_data)
|
|
GETDLSYM(g_object_set_data)
|
|
GETDLSYM(g_object_set_data_full)
|
|
GETDLSYM(g_object_unref)
|
|
GETDLSYM(g_signal_connect_data)
|
|
GETDLSYM(g_signal_handlers_block_matched)
|
|
GETDLSYM(g_signal_handlers_unblock_matched)
|
|
GETDLSYM(g_type_check_instance_cast)
|
|
GETDLSYM(gdk_pixbuf_from_pixdata)
|
|
GETDLSYM(gdk_pixbuf_new_from_data)
|
|
GETDLSYM(gtk_accel_group_new)
|
|
GETDLSYM(gtk_alignment_new)
|
|
GETDLSYM(gtk_box_get_type)
|
|
GETDLSYM(gtk_box_pack_start)
|
|
GETDLSYM(gtk_button_box_get_type)
|
|
GETDLSYM(gtk_button_box_set_layout)
|
|
GETDLSYM(gtk_button_new)
|
|
GETDLSYM(gtk_cell_layout_get_type)
|
|
GETDLSYM(gtk_cell_layout_pack_start)
|
|
GETDLSYM(gtk_cell_layout_set_attributes)
|
|
GETDLSYM(gtk_cell_renderer_text_new)
|
|
GETDLSYM(gtk_check_button_new_with_mnemonic)
|
|
GETDLSYM(gtk_combo_box_get_active)
|
|
GETDLSYM(gtk_combo_box_get_active_iter)
|
|
GETDLSYM(gtk_combo_box_get_active_text)
|
|
GETDLSYM(gtk_combo_box_get_model)
|
|
GETDLSYM(gtk_combo_box_get_type)
|
|
GETDLSYM(gtk_combo_box_new_text)
|
|
GETDLSYM(gtk_combo_box_new_with_model)
|
|
GETDLSYM(gtk_combo_box_set_active)
|
|
GETDLSYM(gtk_combo_box_set_active_iter)
|
|
GETDLSYM(gtk_container_add)
|
|
GETDLSYM(gtk_container_foreach)
|
|
GETDLSYM(gtk_container_get_type)
|
|
GETDLSYM(gtk_container_set_border_width)
|
|
GETDLSYM(gtk_dialog_get_type)
|
|
GETDLSYM(gtk_dialog_run)
|
|
GETDLSYM(gtk_hbox_new)
|
|
GETDLSYM(gtk_hbutton_box_new)
|
|
GETDLSYM(gtk_image_new_from_pixbuf)
|
|
GETDLSYM(gtk_image_new_from_stock)
|
|
GETDLSYM(gtk_init_check)
|
|
GETDLSYM(gtk_label_get_type)
|
|
GETDLSYM(gtk_label_new)
|
|
GETDLSYM(gtk_label_new_with_mnemonic)
|
|
GETDLSYM(gtk_label_set_mnemonic_widget)
|
|
GETDLSYM(gtk_list_store_append)
|
|
GETDLSYM(gtk_list_store_clear)
|
|
GETDLSYM(gtk_list_store_get_type)
|
|
GETDLSYM(gtk_list_store_new)
|
|
GETDLSYM(gtk_list_store_set)
|
|
GETDLSYM(gtk_main)
|
|
GETDLSYM(gtk_main_iteration_do)
|
|
GETDLSYM(gtk_main_quit)
|
|
GETDLSYM(gtk_message_dialog_new)
|
|
GETDLSYM(gtk_misc_get_type)
|
|
GETDLSYM(gtk_misc_set_alignment)
|
|
GETDLSYM(gtk_notebook_get_nth_page)
|
|
GETDLSYM(gtk_notebook_get_type)
|
|
GETDLSYM(gtk_notebook_new)
|
|
GETDLSYM(gtk_notebook_set_current_page)
|
|
GETDLSYM(gtk_notebook_set_tab_label)
|
|
GETDLSYM(gtk_object_get_type)
|
|
GETDLSYM(gtk_scrolled_window_get_type)
|
|
GETDLSYM(gtk_scrolled_window_new)
|
|
GETDLSYM(gtk_scrolled_window_set_policy)
|
|
GETDLSYM(gtk_scrolled_window_set_shadow_type)
|
|
GETDLSYM(gtk_table_get_type)
|
|
GETDLSYM(gtk_table_new)
|
|
GETDLSYM(gtk_table_attach)
|
|
GETDLSYM(gtk_text_buffer_backspace)
|
|
GETDLSYM(gtk_text_buffer_create_mark)
|
|
GETDLSYM(gtk_text_buffer_delete_mark)
|
|
GETDLSYM(gtk_text_buffer_get_end_iter)
|
|
GETDLSYM(gtk_text_buffer_insert)
|
|
// FIXME: should I put a #if !GTK_CHECK_VERSION(2,6,0)
|
|
// around these three, or should I not care?
|
|
GETDLSYM(gtk_text_iter_backward_cursor_position)
|
|
GETDLSYM(gtk_text_iter_equal)
|
|
GETDLSYM(gtk_text_buffer_delete_interactive)
|
|
//
|
|
GETDLSYM(gtk_text_view_get_buffer)
|
|
GETDLSYM(gtk_text_view_get_type)
|
|
GETDLSYM(gtk_text_view_new)
|
|
GETDLSYM(gtk_text_view_scroll_to_mark)
|
|
GETDLSYM(gtk_text_view_set_cursor_visible)
|
|
GETDLSYM(gtk_text_view_set_editable)
|
|
GETDLSYM(gtk_text_view_set_left_margin)
|
|
GETDLSYM(gtk_text_view_set_right_margin)
|
|
GETDLSYM(gtk_text_view_set_wrap_mode)
|
|
GETDLSYM(gtk_toggle_button_get_active)
|
|
GETDLSYM(gtk_toggle_button_get_type)
|
|
GETDLSYM(gtk_toggle_button_set_active)
|
|
GETDLSYM(gtk_tree_model_get)
|
|
GETDLSYM(gtk_tree_model_get_iter)
|
|
GETDLSYM(gtk_tree_model_get_path)
|
|
GETDLSYM(gtk_tree_model_get_type)
|
|
GETDLSYM(gtk_tree_path_get_indices)
|
|
GETDLSYM(gtk_tree_path_new_from_indices)
|
|
GETDLSYM(gtk_tree_selection_get_selected)
|
|
GETDLSYM(gtk_tree_selection_select_iter)
|
|
GETDLSYM(gtk_tree_selection_set_mode)
|
|
GETDLSYM(gtk_tree_sortable_get_type)
|
|
GETDLSYM(gtk_tree_sortable_set_sort_column_id)
|
|
GETDLSYM(gtk_tree_sortable_set_sort_func)
|
|
GETDLSYM(gtk_tree_view_append_column)
|
|
GETDLSYM(gtk_tree_view_column_new_with_attributes)
|
|
GETDLSYM(gtk_tree_view_column_set_expand)
|
|
GETDLSYM(gtk_tree_view_column_set_min_width)
|
|
GETDLSYM(gtk_tree_view_get_model)
|
|
GETDLSYM(gtk_tree_view_get_selection)
|
|
GETDLSYM(gtk_tree_view_get_type)
|
|
GETDLSYM(gtk_tree_view_new_with_model)
|
|
GETDLSYM(gtk_tree_view_set_enable_search)
|
|
GETDLSYM(gtk_tree_view_set_headers_visible)
|
|
GETDLSYM(gtk_vbox_new)
|
|
GETDLSYM(gtk_widget_add_accelerator)
|
|
GETDLSYM(gtk_widget_destroy)
|
|
GETDLSYM(gtk_widget_ref)
|
|
GETDLSYM(gtk_widget_set_sensitive)
|
|
GETDLSYM(gtk_widget_set_size_request)
|
|
GETDLSYM(gtk_widget_show_all)
|
|
GETDLSYM(gtk_widget_unref)
|
|
GETDLSYM(gtk_window_add_accel_group)
|
|
GETDLSYM(gtk_window_get_type)
|
|
GETDLSYM(gtk_window_new)
|
|
GETDLSYM(gtk_window_set_default_icon)
|
|
GETDLSYM(gtk_window_set_position)
|
|
GETDLSYM(gtk_window_set_resizable)
|
|
GETDLSYM(gtk_window_set_title)
|
|
GETDLSYM(gtk_window_set_type_hint)
|
|
GETDLSYM(gtk_window_set_default)
|
|
GETDLSYM(g_utf8_collate)
|
|
}
|
|
while (0);
|
|
|
|
if (err)
|
|
{
|
|
//printf("Failed fetching symbol %s from GTK lib\n", failsym);
|
|
dlclose(handle);
|
|
handle = NULL;
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void dynamicgtk_uninit(void)
|
|
{
|
|
if (handle) dlclose(handle);
|
|
handle = NULL;
|
|
memset(&dynamicgtksyms, 0, sizeof(dynamicgtksyms));
|
|
}
|
|
|