1/*
2 * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25#ifndef _GTK_INTERFACE_H
26#define _GTK_INTERFACE_H
27
28#include <X11/X.h>
29#include <jni.h>
30
31#ifndef FALSE
32#define FALSE (0)
33#define TRUE (!FALSE)
34#endif
35
36#define GTHREAD_LIB_VERSIONED VERSIONED_JNI_LIB_NAME("gthread-2.0", "0")
37#define GTHREAD_LIB JNI_LIB_NAME("gthread-2.0")
38
39#define _G_TYPE_CIC(ip, gt, ct) ((ct*) ip)
40#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type) \
41 (_G_TYPE_CIC ((instance), (g_type), c_type))
42#define GTK_TYPE_FILE_CHOOSER (fp_gtk_file_chooser_get_type ())
43#define GTK_FILE_CHOOSER(obj) \
44 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_CHOOSER, GtkFileChooser))
45#define G_CALLBACK(f) ((GCallback) (f))
46#define G_TYPE_FUNDAMENTAL_SHIFT (2)
47#define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
48#define G_TYPE_OBJECT G_TYPE_MAKE_FUNDAMENTAL (20)
49#define GTK_STOCK_CANCEL "gtk-cancel"
50#define GTK_STOCK_SAVE "gtk-save"
51#define GTK_STOCK_OPEN "gtk-open"
52#define GDK_CURRENT_TIME 0L
53
54#define G_TYPE_INVALID G_TYPE_MAKE_FUNDAMENTAL (0)
55#define G_TYPE_NONE G_TYPE_MAKE_FUNDAMENTAL (1)
56#define G_TYPE_INTERFACE G_TYPE_MAKE_FUNDAMENTAL (2)
57#define G_TYPE_CHAR G_TYPE_MAKE_FUNDAMENTAL (3)
58#define G_TYPE_UCHAR G_TYPE_MAKE_FUNDAMENTAL (4)
59#define G_TYPE_BOOLEAN G_TYPE_MAKE_FUNDAMENTAL (5)
60#define G_TYPE_INT G_TYPE_MAKE_FUNDAMENTAL (6)
61#define G_TYPE_UINT G_TYPE_MAKE_FUNDAMENTAL (7)
62#define G_TYPE_LONG G_TYPE_MAKE_FUNDAMENTAL (8)
63#define G_TYPE_ULONG G_TYPE_MAKE_FUNDAMENTAL (9)
64#define G_TYPE_INT64 G_TYPE_MAKE_FUNDAMENTAL (10)
65#define G_TYPE_UINT64 G_TYPE_MAKE_FUNDAMENTAL (11)
66#define G_TYPE_ENUM G_TYPE_MAKE_FUNDAMENTAL (12)
67#define G_TYPE_FLAGS G_TYPE_MAKE_FUNDAMENTAL (13)
68#define G_TYPE_FLOAT G_TYPE_MAKE_FUNDAMENTAL (14)
69#define G_TYPE_DOUBLE G_TYPE_MAKE_FUNDAMENTAL (15)
70#define G_TYPE_STRING G_TYPE_MAKE_FUNDAMENTAL (16)
71#define G_TYPE_POINTER G_TYPE_MAKE_FUNDAMENTAL (17)
72#define G_TYPE_BOXED G_TYPE_MAKE_FUNDAMENTAL (18)
73#define G_TYPE_PARAM G_TYPE_MAKE_FUNDAMENTAL (19)
74#define G_TYPE_OBJECT G_TYPE_MAKE_FUNDAMENTAL (20)
75
76#define GTK_TYPE_BORDER ((*fp_gtk_border_get_type)())
77
78#define G_TYPE_FUNDAMENTAL_SHIFT (2)
79#define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
80
81#ifndef MIN
82#define MIN(a, b) (((a) < (b)) ? (a) : (b))
83#endif
84
85#define CONV_BUFFER_SIZE 128
86#define NO_SYMBOL_EXCEPTION 1
87
88/* basic types */
89typedef char gchar;
90typedef short gshort;
91typedef int gint;
92typedef long glong;
93typedef float gfloat;
94typedef double gdouble;
95typedef void* gpointer;
96typedef gint gboolean;
97typedef signed char gint8;
98typedef signed short gint16;
99typedef signed int gint32;
100typedef unsigned char guchar;
101typedef unsigned char guint8;
102typedef unsigned short gushort;
103typedef unsigned short guint16;
104typedef unsigned int guint;
105typedef unsigned int guint32;
106typedef unsigned int gsize;
107typedef unsigned long gulong;
108typedef signed long long gint64;
109typedef unsigned long long guint64;
110typedef gulong GType;
111
112typedef struct _GList GList;
113struct _GList
114{
115 gpointer data;
116 GList *next;
117 GList *prev;
118};
119
120typedef struct _GSList GSList;
121struct _GSList {
122 gpointer data;
123 GSList *next;
124};
125
126typedef enum {
127 BUTTON, /* GtkButton */
128 CHECK_BOX, /* GtkCheckButton */
129 CHECK_BOX_MENU_ITEM, /* GtkCheckMenuItem */
130 COLOR_CHOOSER, /* GtkColorSelectionDialog */
131 COMBO_BOX, /* GtkComboBox */
132 COMBO_BOX_ARROW_BUTTON, /* GtkComboBoxEntry */
133 COMBO_BOX_TEXT_FIELD, /* GtkComboBoxEntry */
134 DESKTOP_ICON, /* GtkLabel */
135 DESKTOP_PANE, /* GtkContainer */
136 EDITOR_PANE, /* GtkTextView */
137 FORMATTED_TEXT_FIELD, /* GtkEntry */
138 HANDLE_BOX, /* GtkHandleBox */
139 HPROGRESS_BAR, /* GtkProgressBar */
140 HSCROLL_BAR, /* GtkHScrollbar */
141 HSCROLL_BAR_BUTTON_LEFT, /* GtkHScrollbar */
142 HSCROLL_BAR_BUTTON_RIGHT, /* GtkHScrollbar */
143 HSCROLL_BAR_TRACK, /* GtkHScrollbar */
144 HSCROLL_BAR_THUMB, /* GtkHScrollbar */
145 HSEPARATOR, /* GtkHSeparator */
146 HSLIDER, /* GtkHScale */
147 HSLIDER_TRACK, /* GtkHScale */
148 HSLIDER_THUMB, /* GtkHScale */
149 HSPLIT_PANE_DIVIDER, /* GtkHPaned */
150 INTERNAL_FRAME, /* GtkWindow */
151 INTERNAL_FRAME_TITLE_PANE, /* GtkLabel */
152 IMAGE, /* GtkImage */
153 LABEL, /* GtkLabel */
154 LIST, /* GtkTreeView */
155 MENU, /* GtkMenu */
156 MENU_BAR, /* GtkMenuBar */
157 MENU_ITEM, /* GtkMenuItem */
158 MENU_ITEM_ACCELERATOR, /* GtkLabel */
159 OPTION_PANE, /* GtkMessageDialog */
160 PANEL, /* GtkContainer */
161 PASSWORD_FIELD, /* GtkEntry */
162 POPUP_MENU, /* GtkMenu */
163 POPUP_MENU_SEPARATOR, /* GtkSeparatorMenuItem */
164 RADIO_BUTTON, /* GtkRadioButton */
165 RADIO_BUTTON_MENU_ITEM, /* GtkRadioMenuItem */
166 ROOT_PANE, /* GtkContainer */
167 SCROLL_PANE, /* GtkScrolledWindow */
168 SPINNER, /* GtkSpinButton */
169 SPINNER_ARROW_BUTTON, /* GtkSpinButton */
170 SPINNER_TEXT_FIELD, /* GtkSpinButton */
171 SPLIT_PANE, /* GtkPaned */
172 TABBED_PANE, /* GtkNotebook */
173 TABBED_PANE_TAB_AREA, /* GtkNotebook */
174 TABBED_PANE_CONTENT, /* GtkNotebook */
175 TABBED_PANE_TAB, /* GtkNotebook */
176 TABLE, /* GtkTreeView */
177 TABLE_HEADER, /* GtkButton */
178 TEXT_AREA, /* GtkTextView */
179 TEXT_FIELD, /* GtkEntry */
180 TEXT_PANE, /* GtkTextView */
181 TITLED_BORDER, /* GtkFrame */
182 TOGGLE_BUTTON, /* GtkToggleButton */
183 TOOL_BAR, /* GtkToolbar */
184 TOOL_BAR_DRAG_WINDOW, /* GtkToolbar */
185 TOOL_BAR_SEPARATOR, /* GtkSeparatorToolItem */
186 TOOL_TIP, /* GtkWindow */
187 TREE, /* GtkTreeView */
188 TREE_CELL, /* GtkTreeView */
189 VIEWPORT, /* GtkViewport */
190 VPROGRESS_BAR, /* GtkProgressBar */
191 VSCROLL_BAR, /* GtkVScrollbar */
192 VSCROLL_BAR_BUTTON_UP, /* GtkVScrollbar */
193 VSCROLL_BAR_BUTTON_DOWN, /* GtkVScrollbar */
194 VSCROLL_BAR_TRACK, /* GtkVScrollbar */
195 VSCROLL_BAR_THUMB, /* GtkVScrollbar */
196 VSEPARATOR, /* GtkVSeparator */
197 VSLIDER, /* GtkVScale */
198 VSLIDER_TRACK, /* GtkVScale */
199 VSLIDER_THUMB, /* GtkVScale */
200 VSPLIT_PANE_DIVIDER, /* GtkVPaned */
201 WIDGET_TYPE_SIZE
202} WidgetType;
203
204typedef enum
205{
206 _GTK_ARROW_TYPE,
207 _GTK_BUTTON_TYPE,
208 _GTK_CHECK_BUTTON_TYPE,
209 _GTK_CHECK_MENU_ITEM_TYPE,
210 _GTK_COLOR_SELECTION_DIALOG_TYPE,
211 _GTK_COMBO_BOX_TYPE,
212 _GTK_COMBO_BOX_ARROW_BUTTON_TYPE,
213 _GTK_COMBO_BOX_TEXT_FIELD_TYPE,
214 _GTK_CONTAINER_TYPE,
215 _GTK_ENTRY_TYPE,
216 _GTK_FRAME_TYPE,
217 _GTK_HANDLE_BOX_TYPE,
218 _GTK_HPANED_TYPE,
219 _GTK_HPROGRESS_BAR_TYPE,
220 _GTK_HSCALE_TYPE,
221 _GTK_HSCROLLBAR_TYPE,
222 _GTK_HSEPARATOR_TYPE,
223 _GTK_IMAGE_TYPE,
224 _GTK_MENU_TYPE,
225 _GTK_MENU_BAR_TYPE,
226 _GTK_MENU_ITEM_TYPE,
227 _GTK_NOTEBOOK_TYPE,
228 _GTK_LABEL_TYPE,
229 _GTK_RADIO_BUTTON_TYPE,
230 _GTK_RADIO_MENU_ITEM_TYPE,
231 _GTK_SCROLLED_WINDOW_TYPE,
232 _GTK_SEPARATOR_MENU_ITEM_TYPE,
233 _GTK_SEPARATOR_TOOL_ITEM_TYPE,
234 _GTK_SPIN_BUTTON_TYPE,
235 _GTK_TEXT_VIEW_TYPE,
236 _GTK_TOGGLE_BUTTON_TYPE,
237 _GTK_TOOLBAR_TYPE,
238 _GTK_TOOLTIP_TYPE,
239 _GTK_TREE_VIEW_TYPE,
240 _GTK_VIEWPORT_TYPE,
241 _GTK_VPANED_TYPE,
242 _GTK_VPROGRESS_BAR_TYPE,
243 _GTK_VSCALE_TYPE,
244 _GTK_VSCROLLBAR_TYPE,
245 _GTK_VSEPARATOR_TYPE,
246 _GTK_WINDOW_TYPE,
247 _GTK_DIALOG_TYPE,
248 _GTK_WIDGET_TYPE_SIZE
249} GtkWidgetType;
250
251typedef enum
252{
253 GTK_STATE_NORMAL,
254 GTK_STATE_ACTIVE,
255 GTK_STATE_PRELIGHT,
256 GTK_STATE_SELECTED,
257 GTK_STATE_INSENSITIVE,
258 GTK_STATE_INCONSISTENT,
259 GTK_STATE_FOCUSED
260} GtkStateType;
261
262typedef enum
263{
264 GTK_SHADOW_NONE,
265 GTK_SHADOW_IN,
266 GTK_SHADOW_OUT,
267 GTK_SHADOW_ETCHED_IN,
268 GTK_SHADOW_ETCHED_OUT
269} GtkShadowType;
270
271typedef enum
272{
273 GTK_EXPANDER_COLLAPSED,
274 GTK_EXPANDER_SEMI_COLLAPSED,
275 GTK_EXPANDER_SEMI_EXPANDED,
276 GTK_EXPANDER_EXPANDED
277} GtkExpanderStyle;
278
279typedef enum
280{
281 GTK_ICON_SIZE_INVALID,
282 GTK_ICON_SIZE_MENU,
283 GTK_ICON_SIZE_SMALL_TOOLBAR,
284 GTK_ICON_SIZE_LARGE_TOOLBAR,
285 GTK_ICON_SIZE_BUTTON,
286 GTK_ICON_SIZE_DND,
287 GTK_ICON_SIZE_DIALOG
288} GtkIconSize;
289
290typedef enum
291{
292 GTK_ORIENTATION_HORIZONTAL,
293 GTK_ORIENTATION_VERTICAL
294} GtkOrientation;
295
296typedef enum
297{
298 FOREGROUND,
299 BACKGROUND,
300 TEXT_FOREGROUND,
301 TEXT_BACKGROUND,
302 FOCUS,
303 LIGHT,
304 DARK,
305 MID,
306 BLACK,
307 WHITE
308} ColorType;
309
310typedef enum
311{
312 GTK_FONT_NAME,
313 GTK_ICON_SIZES,
314 GTK_CURSOR_BLINK,
315 GTK_CURSOR_BLINK_TIME
316} Setting;
317
318typedef enum
319{
320 GTK_ARROW_UP,
321 GTK_ARROW_DOWN,
322 GTK_ARROW_LEFT,
323 GTK_ARROW_RIGHT,
324 GTK_ARROW_NONE
325} GtkArrowType;
326
327typedef enum
328{
329 GTK_TEXT_DIR_NONE,
330 GTK_TEXT_DIR_LTR,
331 GTK_TEXT_DIR_RTL
332} GtkTextDirection;
333
334typedef enum
335{
336 GTK_POS_LEFT,
337 GTK_POS_RIGHT,
338 GTK_POS_TOP,
339 GTK_POS_BOTTOM
340} GtkPositionType;
341
342/* SynthConstants */
343static const gint ENABLED = 1 << 0;
344static const gint MOUSE_OVER = 1 << 1;
345static const gint PRESSED = 1 << 2;
346static const gint DISABLED = 1 << 3;
347static const gint FOCUSED = 1 << 8;
348static const gint SELECTED = 1 << 9;
349static const gint DEFAULT = 1 << 10;
350
351typedef enum
352{
353 GTK_ANY,
354 GTK_1,
355 GTK_2,
356 GTK_3
357} GtkVersion;
358
359//------------------------------
360
361
362
363typedef enum {
364 GTK_RESPONSE_NONE = -1,
365 GTK_RESPONSE_REJECT = -2,
366 GTK_RESPONSE_ACCEPT = -3,
367 GTK_RESPONSE_DELETE_EVENT = -4,
368 GTK_RESPONSE_OK = -5,
369 GTK_RESPONSE_CANCEL = -6,
370 GTK_RESPONSE_CLOSE = -7,
371 GTK_RESPONSE_YES = -8,
372 GTK_RESPONSE_NO = -9,
373 GTK_RESPONSE_APPLY = -10,
374 GTK_RESPONSE_HELP = -11
375} GtkResponseType;
376
377typedef enum {
378 GTK_FILE_CHOOSER_ACTION_OPEN,
379 GTK_FILE_CHOOSER_ACTION_SAVE,
380 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
381 GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
382} GtkFileChooserAction;
383
384typedef enum {
385 GTK_FILE_FILTER_FILENAME = 1 << 0,
386 GTK_FILE_FILTER_URI = 1 << 1,
387 GTK_FILE_FILTER_DISPLAY_NAME = 1 << 2,
388 GTK_FILE_FILTER_MIME_TYPE = 1 << 3
389} GtkFileFilterFlags;
390
391typedef enum {
392 GDK_COLORSPACE_RGB
393} GdkColorspace;
394
395typedef enum {
396 GDK_INTERP_NEAREST,
397 GDK_INTERP_TILES,
398 GDK_INTERP_BILINEAR,
399 GDK_INTERP_HYPER
400} GdkInterpType;
401
402typedef enum {
403 G_CONNECT_AFTER = 1 << 0, G_CONNECT_SWAPPED = 1 << 1
404} GConnectFlags;
405//------------------------------
406
407
408typedef void GError;
409typedef void GdkScreen;
410typedef void GtkWindow;
411typedef void GdkWindow;
412typedef void GClosure;
413typedef void GtkFileChooser;
414typedef void GtkFileFilter;
415typedef struct {
416 GtkFileFilterFlags contains;
417 const gchar *filename;
418 const gchar *uri;
419 const gchar *display_name;
420 const gchar *mime_type;
421} GtkFileFilterInfo;
422typedef gboolean (*GtkFileFilterFunc)(const GtkFileFilterInfo *filter_info,
423 gpointer data);
424typedef void (*GClosureNotify)(gpointer data, GClosure *closure);
425typedef void (*GDestroyNotify)(gpointer data);
426typedef void (*GCallback)(void);
427
428
429typedef struct GtkApi {
430 int version;
431 gboolean (*show_uri_load)(JNIEnv *env);
432 gboolean (*unload)();
433 void (*flush_event_loop)();
434 gchar* (*gtk_check_version)(guint required_major, guint required_minor,
435 guint required_micro);
436 jobject (*get_setting)(JNIEnv *env, Setting property);
437
438 void (*paint_arrow)(WidgetType widget_type, GtkStateType state_type,
439 GtkShadowType shadow_type, const gchar *detail,
440 gint x, gint y, gint width, gint height,
441 GtkArrowType arrow_type, gboolean fill);
442 void (*paint_box)(WidgetType widget_type, GtkStateType state_type,
443 GtkShadowType shadow_type, const gchar *detail,
444 gint x, gint y, gint width, gint height,
445 gint synth_state, GtkTextDirection dir);
446 void (*paint_box_gap)(WidgetType widget_type, GtkStateType state_type,
447 GtkShadowType shadow_type, const gchar *detail,
448 gint x, gint y, gint width, gint height,
449 GtkPositionType gap_side, gint gap_x, gint gap_width);
450 void (*paint_expander)(WidgetType widget_type, GtkStateType state_type,
451 const gchar *detail, gint x, gint y, gint width, gint height,
452 GtkExpanderStyle expander_style);
453 void (*paint_extension)(WidgetType widget_type, GtkStateType state_type,
454 GtkShadowType shadow_type, const gchar *detail,
455 gint x, gint y, gint width, gint height, GtkPositionType gap_side);
456 void (*paint_flat_box)(WidgetType widget_type, GtkStateType state_type,
457 GtkShadowType shadow_type, const gchar *detail,
458 gint x, gint y, gint width, gint height, gboolean has_focus);
459 void (*paint_focus)(WidgetType widget_type, GtkStateType state_type,
460 const char *detail, gint x, gint y, gint width, gint height);
461 void (*paint_handle)(WidgetType widget_type, GtkStateType state_type,
462 GtkShadowType shadow_type, const gchar *detail,
463 gint x, gint y, gint width, gint height, GtkOrientation orientation);
464 void (*paint_hline)(WidgetType widget_type, GtkStateType state_type,
465 const gchar *detail, gint x, gint y, gint width, gint height);
466 void (*paint_vline)(WidgetType widget_type, GtkStateType state_type,
467 const gchar *detail, gint x, gint y, gint width, gint height);
468 void (*paint_option)(WidgetType widget_type, gint synth_state,
469 const gchar *detail, gint x, gint y, gint width, gint height);
470 void (*paint_shadow)(WidgetType widget_type, GtkStateType state_type,
471 GtkShadowType shadow_type, const gchar *detail,
472 gint x, gint y, gint width, gint height,
473 gint synth_state, GtkTextDirection dir);
474 void (*paint_slider)(WidgetType widget_type, GtkStateType state_type,
475 GtkShadowType shadow_type, const gchar *detail,
476 gint x, gint y, gint width, gint height, GtkOrientation orientation,
477 gboolean has_focus);
478 void (*paint_background)(WidgetType widget_type, GtkStateType state_type,
479 gint x, gint y, gint width, gint height);
480 void (*paint_check)(WidgetType widget_type, gint synth_state,
481 const gchar *detail, gint x, gint y, gint width, gint height);
482 void (*set_range_value)(WidgetType widget_type, jdouble value,
483 jdouble min, jdouble max, jdouble visible);
484
485 void (*init_painting)(JNIEnv *env, gint w, gint h);
486 gint (*copy_image)(gint *dest, gint width, gint height);
487
488 gint (*get_xthickness)(JNIEnv *env, WidgetType widget_type);
489 gint (*get_ythickness)(JNIEnv *env, WidgetType widget_type);
490 gint (*get_color_for_state)(JNIEnv *env, WidgetType widget_type,
491 GtkStateType state_type, ColorType color_type);
492 jobject (*get_class_value)(JNIEnv *env, WidgetType widget_type,
493 const char* key);
494
495 jstring (*get_pango_font_name)(JNIEnv *env, WidgetType widget_type);
496 jboolean (*get_icon_data)(JNIEnv *env, gint widget_type,
497 const gchar *stock_id, GtkIconSize size,
498 GtkTextDirection direction, const char *detail,
499 jmethodID icon_upcall_method, jobject this);
500 jboolean (*get_file_icon_data)(JNIEnv *env, const char *filename,
501 GError **error, jmethodID icon_upcall_method, jobject this);
502 void (*gdk_threads_enter)(void);
503 void (*gdk_threads_leave)(void);
504 gboolean (*gtk_show_uri)(GdkScreen *screen, const gchar *uri,
505 guint32 timestamp, GError **error);
506 gboolean (*get_drawable_data)(JNIEnv *env, jintArray pixelArray,
507 jint x, jint y, jint width, jint height,
508 jint jwidth, int dx, int dy, jint scale);
509 void (*g_free)(gpointer mem);
510
511
512 gchar* (*gtk_file_chooser_get_filename)(GtkFileChooser *chooser);
513 void (*gtk_widget_hide)(void* widget);
514 void (*gtk_main_quit)(void);
515 void* (*gtk_file_chooser_dialog_new)(const gchar *title,
516 GtkWindow *parent, GtkFileChooserAction action,
517 const gchar *first_button_text, ...);
518 gboolean (*gtk_file_chooser_set_current_folder)(GtkFileChooser *chooser,
519 const gchar *filename);
520 gboolean (*gtk_file_chooser_set_filename)(GtkFileChooser *chooser,
521 const char *filename);
522 void (*gtk_file_chooser_set_current_name)(GtkFileChooser *chooser,
523 const gchar *name);
524 void (*gtk_file_filter_add_custom)(GtkFileFilter *filter,
525 GtkFileFilterFlags needed, GtkFileFilterFunc func, gpointer data,
526 GDestroyNotify notify);
527 void (*gtk_file_chooser_set_filter)(GtkFileChooser *chooser,
528 GtkFileFilter *filter);
529 GType (*gtk_file_chooser_get_type)(void);
530 GtkFileFilter* (*gtk_file_filter_new)(void);
531 void (*gtk_file_chooser_set_do_overwrite_confirmation)(
532 GtkFileChooser *chooser, gboolean do_overwrite_confirmation);
533 void (*gtk_file_chooser_set_select_multiple)(
534 GtkFileChooser *chooser, gboolean select_multiple);
535 gchar* (*gtk_file_chooser_get_current_folder)(GtkFileChooser *chooser);
536 GSList* (*gtk_file_chooser_get_filenames)(GtkFileChooser *chooser);
537 guint (*gtk_g_slist_length)(GSList *list);
538 gulong (*g_signal_connect_data)(gpointer instance,
539 const gchar *detailed_signal, GCallback c_handler, gpointer data,
540 GClosureNotify destroy_data, GConnectFlags connect_flags);
541 void (*gtk_widget_show)(void *widget);
542 void (*gtk_main)(void);
543 guint (*gtk_main_level)(void);
544 gchar* (*g_path_get_dirname) (const gchar *file_name);
545 XID (*gdk_x11_drawable_get_xid) (void *drawable);
546 void (*gtk_widget_destroy)(void *widget);
547 void (*gtk_window_present)(void *window);
548 void (*gtk_window_move)(void *window, gint x, gint y);
549 void (*gtk_window_resize)(void *window, gint width, gint height);
550 GdkWindow *(*get_window)(void *widget);
551
552 void (*g_object_unref)(gpointer object);
553 GList* (*g_list_append) (GList *list, gpointer data);
554 void (*g_list_free) (GList *list);
555 void (*g_list_free_full) (GList *list, GDestroyNotify free_func);
556} GtkApi;
557
558gboolean gtk_load(JNIEnv *env, GtkVersion version, gboolean verbose);
559gboolean gtk_check_version(GtkVersion version);
560
561typedef struct _GThreadFunctions GThreadFunctions;
562static gboolean (*fp_g_thread_get_initialized)(void);
563static void (*fp_g_thread_init)(GThreadFunctions *vtable);
564static void (*fp_gdk_threads_init)(void);
565static void (*fp_gdk_threads_enter)(void);
566static void (*fp_gdk_threads_leave)(void);
567
568extern GtkApi* gtk;
569
570#endif /* !_GTK_INTERFACE_H */
571