/*******************************************************************************
 * Copyright (c) 2000, 2021 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *    IBM Corporation - initial API and implementation
 *******************************************************************************/

/* Note: This file was auto-generated by org.eclipse.swt.tools.internal.JNIGenerator */
/* DO NOT EDIT - your changes will be lost. */

#ifdef NATIVE_STATS
extern int GTK4_nativeFunctionCount;
extern int GTK4_nativeFunctionCallCount[];
extern char* GTK4_nativeFunctionNames[];
#define GTK4_NATIVE_ENTER(env, that, func) GTK4_nativeFunctionCallCount[func]++;
#define GTK4_NATIVE_EXIT(env, that, func) 
#else
#ifndef GTK4_NATIVE_ENTER
#define GTK4_NATIVE_ENTER(env, that, func) 
#endif
#ifndef GTK4_NATIVE_EXIT
#define GTK4_NATIVE_EXIT(env, that, func) 
#endif
#endif

typedef enum {
	gdk_1content_1formats_1builder_1add_1mime_1type_FUNC,
	gdk_1content_1formats_1builder_1free_1to_1formats_FUNC,
	gdk_1content_1formats_1builder_1new_FUNC,
	gdk_1toplevel_1focus_FUNC,
	gdk_1toplevel_1get_1state_FUNC,
	gdk_1toplevel_1lower_FUNC,
	gdk_1toplevel_1set_1icon_1list_FUNC,
	gtk_1box_1append_FUNC,
	gtk_1box_1insert_1child_1after_FUNC,
	gtk_1box_1prepend_FUNC,
	gtk_1button_1new_1from_1icon_1name_FUNC,
	gtk_1button_1set_1child_FUNC,
	gtk_1calendar_1get_1date_FUNC,
	gtk_1calendar_1select_1day_FUNC,
	gtk_1calendar_1set_1show_1day_1names_FUNC,
	gtk_1calendar_1set_1show_1heading_FUNC,
	gtk_1calendar_1set_1show_1week_1numbers_FUNC,
	gtk_1check_1button_1get_1active_FUNC,
	gtk_1check_1button_1set_1active_FUNC,
	gtk_1check_1button_1set_1group_FUNC,
	gtk_1check_1button_1set_1inconsistent_FUNC,
	gtk_1check_1button_1set_1use_1underline_FUNC,
	gtk_1combo_1box_1get_1child_FUNC,
	gtk_1drag_1source_1new_FUNC,
	gtk_1drag_1source_1set_1actions_FUNC,
	gtk_1drag_1source_1set_1icon_FUNC,
	gtk_1drop_1target_1async_1new_FUNC,
	gtk_1drop_1target_1async_1set_1formats_FUNC,
	gtk_1entry_1get_1buffer_FUNC,
	gtk_1entry_1set_1buffer_FUNC,
	gtk_1event_1controller_1focus_1new_FUNC,
	gtk_1event_1controller_1get_1current_1event_FUNC,
	gtk_1event_1controller_1key_1new_FUNC,
	gtk_1event_1controller_1motion_1new_FUNC,
	gtk_1event_1controller_1scroll_1new_FUNC,
	gtk_1expander_1set_1child_FUNC,
	gtk_1file_1chooser_1get_1file_FUNC,
	gtk_1file_1chooser_1get_1files_FUNC,
	gtk_1file_1chooser_1set_1current_1folder_FUNC,
	gtk_1file_1chooser_1set_1file_FUNC,
	gtk_1frame_1set_1child_FUNC,
	gtk_1gesture_1click_1new_FUNC,
	gtk_1hsv_1to_1rgb_FUNC,
	gtk_1icon_1paintable_1get_1file_FUNC,
	gtk_1icon_1theme_1get_1for_1display_FUNC,
	gtk_1icon_1theme_1lookup_1icon_FUNC,
	gtk_1im_1context_1filter_1keypress_FUNC,
	gtk_1init_1check_FUNC,
	gtk_1keyval_1trigger_1new_FUNC,
	gtk_1named_1action_1new_FUNC,
	gtk_1native_1get_1surface_FUNC,
	gtk_1picture_1new_FUNC,
	gtk_1picture_1set_1can_1shrink_FUNC,
	gtk_1picture_1set_1paintable_FUNC,
	gtk_1popover_1menu_1bar_1new_1from_1model_FUNC,
	gtk_1popover_1menu_1new_1from_1model_1full_FUNC,
	gtk_1popover_1menu_1set_1menu_1model_FUNC,
	gtk_1popover_1set_1has_1arrow_FUNC,
	gtk_1rgb_1to_1hsv_FUNC,
	gtk_1scrollbar_1get_1adjustment_FUNC,
	gtk_1scrolled_1window_1get_1has_1frame_FUNC,
	gtk_1scrolled_1window_1new_FUNC,
	gtk_1scrolled_1window_1set_1child_FUNC,
	gtk_1scrolled_1window_1set_1has_1frame_FUNC,
	gtk_1shortcut_1controller_1add_1shortcut_FUNC,
	gtk_1shortcut_1controller_1new_FUNC,
	gtk_1shortcut_1controller_1remove_1shortcut_FUNC,
	gtk_1shortcut_1controller_1set_1scope_FUNC,
	gtk_1shortcut_1new_FUNC,
	gtk_1text_1get_1buffer_FUNC,
	gtk_1widget_1action_1set_1enabled_FUNC,
	gtk_1widget_1activate_1action_FUNC,
	gtk_1widget_1add_1controller_FUNC,
	gtk_1widget_1class_1add_1binding_1signal_FUNC,
	gtk_1widget_1get_1first_1child_FUNC,
	gtk_1widget_1get_1last_1child_FUNC,
	gtk_1widget_1get_1native_FUNC,
	gtk_1widget_1get_1next_1sibling_FUNC,
	gtk_1widget_1get_1prev_1sibling_FUNC,
	gtk_1widget_1get_1receives_1default_FUNC,
	gtk_1widget_1get_1root_FUNC,
	gtk_1widget_1measure_FUNC,
	gtk_1widget_1set_1cursor_FUNC,
	gtk_1widget_1snapshot_1child_FUNC,
	gtk_1widget_1translate_1coordinates_FUNC,
	gtk_1window_1destroy_FUNC,
	gtk_1window_1get_1icon_1name_FUNC,
	gtk_1window_1minimize_FUNC,
	gtk_1window_1new_FUNC,
	gtk_1window_1set_1child_FUNC,
	gtk_1window_1set_1default_1widget_FUNC,
	gtk_1window_1set_1icon_1name_FUNC,
	gtk_1window_1unminimize_FUNC,
} GTK4_FUNCS;
