1 /*
   2  * Copyright (c) 2005, 2015, 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 _GTK2_INTERFACE_H
  26 #define _GTK2_INTERFACE_H
  27 
  28 #include <stdlib.h>
  29 #include <jni.h>
  30 #include <X11/X.h>
  31 
  32 #define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  33 #define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  34 #define GTK_TYPE_FILE_CHOOSER             (fp_gtk_file_chooser_get_type ())
  35 #define GTK_FILE_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_CHOOSER, GtkFileChooser))
  36 #define fp_g_signal_connect(instance, detailed_signal, c_handler, data) \
  37     fp_g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  38 #define G_CALLBACK(f) ((GCallback) (f))
  39 #define G_TYPE_FUNDAMENTAL_SHIFT (2)
  40 #define G_TYPE_MAKE_FUNDAMENTAL(x) ((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  41 #define G_TYPE_OBJECT G_TYPE_MAKE_FUNDAMENTAL (20)
  42 #define G_OBJECT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  43 #define GTK_STOCK_CANCEL           "gtk-cancel"
  44 #define GTK_STOCK_SAVE             "gtk-save"
  45 #define GTK_STOCK_OPEN             "gtk-open"
  46 #define GDK_CURRENT_TIME           0L
  47 
  48 typedef enum _WidgetType
  49 {
  50     BUTTON,                     /* GtkButton */
  51     CHECK_BOX,                  /* GtkCheckButton */
  52     CHECK_BOX_MENU_ITEM,        /* GtkCheckMenuItem */
  53     COLOR_CHOOSER,              /* GtkColorSelectionDialog */
  54     COMBO_BOX,                  /* GtkComboBox */
  55     COMBO_BOX_ARROW_BUTTON,     /* GtkComboBoxEntry */
  56     COMBO_BOX_TEXT_FIELD,       /* GtkComboBoxEntry */
  57     DESKTOP_ICON,               /* GtkLabel */
  58     DESKTOP_PANE,               /* GtkContainer */
  59     EDITOR_PANE,                /* GtkTextView */
  60     FORMATTED_TEXT_FIELD,       /* GtkEntry */
  61     HANDLE_BOX,                 /* GtkHandleBox */
  62     HPROGRESS_BAR,              /* GtkProgressBar */
  63     HSCROLL_BAR,                /* GtkHScrollbar */
  64     HSCROLL_BAR_BUTTON_LEFT,    /* GtkHScrollbar */
  65     HSCROLL_BAR_BUTTON_RIGHT,   /* GtkHScrollbar */
  66     HSCROLL_BAR_TRACK,          /* GtkHScrollbar */
  67     HSCROLL_BAR_THUMB,          /* GtkHScrollbar */
  68     HSEPARATOR,                 /* GtkHSeparator */
  69     HSLIDER,                    /* GtkHScale */
  70     HSLIDER_TRACK,              /* GtkHScale */
  71     HSLIDER_THUMB,              /* GtkHScale */
  72     HSPLIT_PANE_DIVIDER,        /* GtkHPaned */
  73     INTERNAL_FRAME,             /* GtkWindow */
  74     INTERNAL_FRAME_TITLE_PANE,  /* GtkLabel */
  75     IMAGE,                      /* GtkImage */
  76     LABEL,                      /* GtkLabel */
  77     LIST,                       /* GtkTreeView */
  78     MENU,                       /* GtkMenu */
  79     MENU_BAR,                   /* GtkMenuBar */
  80     MENU_ITEM,                  /* GtkMenuItem */
  81     MENU_ITEM_ACCELERATOR,      /* GtkLabel */
  82     OPTION_PANE,                /* GtkMessageDialog */
  83     PANEL,                      /* GtkContainer */
  84     PASSWORD_FIELD,             /* GtkEntry */
  85     POPUP_MENU,                 /* GtkMenu */
  86     POPUP_MENU_SEPARATOR,       /* GtkSeparatorMenuItem */
  87     RADIO_BUTTON,               /* GtkRadioButton */
  88     RADIO_BUTTON_MENU_ITEM,     /* GtkRadioMenuItem */
  89     ROOT_PANE,                  /* GtkContainer */
  90     SCROLL_PANE,                /* GtkScrolledWindow */
  91     SPINNER,                    /* GtkSpinButton */
  92     SPINNER_ARROW_BUTTON,       /* GtkSpinButton */
  93     SPINNER_TEXT_FIELD,         /* GtkSpinButton */
  94     SPLIT_PANE,                 /* GtkPaned */
  95     TABBED_PANE,                /* GtkNotebook */
  96     TABBED_PANE_TAB_AREA,       /* GtkNotebook */
  97     TABBED_PANE_CONTENT,        /* GtkNotebook */
  98     TABBED_PANE_TAB,            /* GtkNotebook */
  99     TABLE,                      /* GtkTreeView */
 100     TABLE_HEADER,               /* GtkButton */
 101     TEXT_AREA,                  /* GtkTextView */
 102     TEXT_FIELD,                 /* GtkEntry */
 103     TEXT_PANE,                  /* GtkTextView */
 104     TITLED_BORDER,              /* GtkFrame */
 105     TOGGLE_BUTTON,              /* GtkToggleButton */
 106     TOOL_BAR,                   /* GtkToolbar */
 107     TOOL_BAR_DRAG_WINDOW,       /* GtkToolbar */
 108     TOOL_BAR_SEPARATOR,         /* GtkSeparatorToolItem */
 109     TOOL_TIP,                   /* GtkWindow */
 110     TREE,                       /* GtkTreeView */
 111     TREE_CELL,                  /* GtkTreeView */
 112     VIEWPORT,                   /* GtkViewport */
 113     VPROGRESS_BAR,              /* GtkProgressBar */
 114     VSCROLL_BAR,                /* GtkVScrollbar */
 115     VSCROLL_BAR_BUTTON_UP,      /* GtkVScrollbar */
 116     VSCROLL_BAR_BUTTON_DOWN,    /* GtkVScrollbar */
 117     VSCROLL_BAR_TRACK,          /* GtkVScrollbar */
 118     VSCROLL_BAR_THUMB,          /* GtkVScrollbar */
 119     VSEPARATOR,                 /* GtkVSeparator */
 120     VSLIDER,                    /* GtkVScale */
 121     VSLIDER_TRACK,              /* GtkVScale */
 122     VSLIDER_THUMB,              /* GtkVScale */
 123     VSPLIT_PANE_DIVIDER,        /* GtkVPaned */
 124     WIDGET_TYPE_SIZE
 125 } WidgetType;
 126 
 127 typedef enum _ColorType
 128 {
 129     FOREGROUND,
 130     BACKGROUND,
 131     TEXT_FOREGROUND,
 132     TEXT_BACKGROUND,
 133     FOCUS,
 134     LIGHT,
 135     DARK,
 136     MID,
 137     BLACK,
 138     WHITE
 139 } ColorType;
 140 
 141 typedef enum _Setting
 142 {
 143     GTK_FONT_NAME,
 144     GTK_ICON_SIZES,
 145     GTK_CURSOR_BLINK,
 146     GTK_CURSOR_BLINK_TIME
 147 } Setting;
 148 
 149 /* GTK types, here to eliminate need for GTK headers at compile time */
 150 
 151 #ifndef FALSE
 152 #define FALSE           (0)
 153 #define TRUE            (!FALSE)
 154 #endif
 155 
 156 #define GTK_HAS_FOCUS   (1 << 12)
 157 #define GTK_HAS_DEFAULT (1 << 14)
 158 
 159 
 160 /* basic types */
 161 typedef char    gchar;
 162 typedef short   gshort;
 163 typedef int     gint;
 164 typedef long    glong;
 165 typedef float   gfloat;
 166 typedef double  gdouble;
 167 typedef void*   gpointer;
 168 typedef gint    gboolean;
 169 
 170 typedef signed char  gint8;
 171 typedef signed short gint16;
 172 typedef signed int   gint32;
 173 
 174 typedef unsigned char  guchar;
 175 typedef unsigned char  guint8;
 176 typedef unsigned short gushort;
 177 typedef unsigned short guint16;
 178 typedef unsigned int   guint;
 179 typedef unsigned int   guint32;
 180 typedef unsigned int   gsize;
 181 typedef unsigned long  gulong;
 182 
 183 typedef signed long long   gint64;
 184 typedef unsigned long long guint64;
 185 
 186 /* enumerated constants */
 187 typedef enum
 188 {
 189   GTK_ARROW_UP,
 190   GTK_ARROW_DOWN,
 191   GTK_ARROW_LEFT,
 192   GTK_ARROW_RIGHT
 193 } GtkArrowType;
 194 
 195 typedef enum {
 196   GDK_COLORSPACE_RGB
 197 } GdkColorspace;
 198 
 199 typedef enum
 200 {
 201   GTK_EXPANDER_COLLAPSED,
 202   GTK_EXPANDER_SEMI_COLLAPSED,
 203   GTK_EXPANDER_SEMI_EXPANDED,
 204   GTK_EXPANDER_EXPANDED
 205 } GtkExpanderStyle;
 206 
 207 typedef enum
 208 {
 209   GTK_ICON_SIZE_INVALID,
 210   GTK_ICON_SIZE_MENU,
 211   GTK_ICON_SIZE_SMALL_TOOLBAR,
 212   GTK_ICON_SIZE_LARGE_TOOLBAR,
 213   GTK_ICON_SIZE_BUTTON,
 214   GTK_ICON_SIZE_DND,
 215   GTK_ICON_SIZE_DIALOG
 216 } GtkIconSize;
 217 
 218 typedef enum
 219 {
 220   GTK_ORIENTATION_HORIZONTAL,
 221   GTK_ORIENTATION_VERTICAL
 222 } GtkOrientation;
 223 
 224 typedef enum
 225 {
 226   GTK_POS_LEFT,
 227   GTK_POS_RIGHT,
 228   GTK_POS_TOP,
 229   GTK_POS_BOTTOM
 230 } GtkPositionType;
 231 
 232 typedef enum
 233 {
 234   GTK_SHADOW_NONE,
 235   GTK_SHADOW_IN,
 236   GTK_SHADOW_OUT,
 237   GTK_SHADOW_ETCHED_IN,
 238   GTK_SHADOW_ETCHED_OUT
 239 } GtkShadowType;
 240 
 241 typedef enum
 242 {
 243   GTK_STATE_NORMAL,
 244   GTK_STATE_ACTIVE,
 245   GTK_STATE_PRELIGHT,
 246   GTK_STATE_SELECTED,
 247   GTK_STATE_INSENSITIVE
 248 } GtkStateType;
 249 
 250 typedef enum
 251 {
 252   GTK_TEXT_DIR_NONE,
 253   GTK_TEXT_DIR_LTR,
 254   GTK_TEXT_DIR_RTL
 255 } GtkTextDirection;
 256 
 257 typedef enum
 258 {
 259   GTK_WINDOW_TOPLEVEL,
 260   GTK_WINDOW_POPUP
 261 } GtkWindowType;
 262 
 263 typedef enum
 264 {
 265   G_PARAM_READABLE            = 1 << 0,
 266   G_PARAM_WRITABLE            = 1 << 1,
 267   G_PARAM_CONSTRUCT           = 1 << 2,
 268   G_PARAM_CONSTRUCT_ONLY      = 1 << 3,
 269   G_PARAM_LAX_VALIDATION      = 1 << 4,
 270   G_PARAM_PRIVATE             = 1 << 5
 271 } GParamFlags;
 272 
 273 typedef enum {
 274     GDK_INTERP_NEAREST,
 275     GDK_INTERP_TILES,
 276     GDK_INTERP_BILINEAR,
 277     GDK_INTERP_HYPER
 278 } GdkInterpType;
 279 
 280 /* We define all structure pointers to be void* */
 281 typedef void GError;
 282 typedef void GMainContext;
 283 typedef void GVfs;
 284 
 285 typedef struct _GSList GSList;
 286 struct _GSList
 287 {
 288   gpointer data;
 289   GSList *next;
 290 };
 291 
 292 typedef struct _GList GList;
 293 
 294 struct _GList
 295 {
 296   gpointer data; 
 297   GList *next;
 298   GList *prev;
 299 };
 300 
 301 typedef void GdkColormap;
 302 typedef void GdkDrawable;
 303 typedef void GdkGC;
 304 typedef void GdkScreen;
 305 typedef void GdkPixbuf;
 306 typedef void GdkPixmap;
 307 typedef void GdkWindow;
 308 
 309 typedef void GtkFixed;
 310 typedef void GtkMenuItem;
 311 typedef void GtkMenuShell;
 312 typedef void GtkWidgetClass;
 313 typedef void PangoFontDescription;
 314 typedef void GtkSettings;
 315 
 316 /* Some real structures */
 317 typedef struct
 318 {
 319   guint32 pixel;
 320   guint16 red;
 321   guint16 green;
 322   guint16 blue;
 323 } GdkColor;
 324 
 325 typedef struct {
 326   gint      fd;
 327   gushort   events;
 328   gushort   revents;
 329 } GPollFD;
 330 
 331 typedef struct {
 332   gint x;
 333   gint y;
 334   gint width;
 335   gint height;
 336 } GdkRectangle;
 337 
 338 typedef struct {
 339   gint x;
 340   gint y;
 341   gint width;
 342   gint height;
 343 } GtkAllocation;
 344 
 345 typedef struct {
 346   gint width;
 347   gint height;
 348 } GtkRequisition;
 349 
 350 typedef struct {
 351   GtkWidgetClass *g_class;
 352 } GTypeInstance;
 353 
 354 typedef struct {
 355   gint left;
 356   gint right;
 357   gint top;
 358   gint bottom;
 359 } GtkBorder;
 360 
 361 /******************************************************
 362  * FIXME: it is more safe to include gtk headers for
 363  * the precise type definition of GType and other
 364  * structures. This is a place where getting rid of gtk
 365  * headers may be dangerous.
 366  ******************************************************/
 367 typedef gulong         GType;
 368 
 369 typedef struct
 370 {
 371   GType         g_type;
 372 
 373   union {
 374     gint        v_int;
 375     guint       v_uint;
 376     glong       v_long;
 377     gulong      v_ulong;
 378     gint64      v_int64;
 379     guint64     v_uint64;
 380     gfloat      v_float;
 381     gdouble     v_double;
 382     gpointer    v_pointer;
 383   } data[2];
 384 } GValue;
 385 
 386 typedef struct
 387 {
 388   GTypeInstance  g_type_instance;
 389 
 390   gchar         *name;
 391   GParamFlags    flags;
 392   GType          value_type;
 393   GType          owner_type;
 394 } GParamSpec;
 395 
 396 typedef struct {
 397   GTypeInstance g_type_instance;
 398   guint         ref_count;
 399   void         *qdata;
 400 } GObject;
 401 
 402 typedef struct {
 403   GObject parent_instance;
 404   guint32 flags;
 405 } GtkObject;
 406 
 407 typedef struct
 408 {
 409   GObject parent_instance;
 410 
 411   GdkColor fg[5];
 412   GdkColor bg[5];
 413   GdkColor light[5];
 414   GdkColor dark[5];
 415   GdkColor mid[5];
 416   GdkColor text[5];
 417   GdkColor base[5];
 418   GdkColor text_aa[5];          /* Halfway between text/base */
 419 
 420   GdkColor black;
 421   GdkColor white;
 422   PangoFontDescription *font_desc;
 423 
 424   gint xthickness;
 425   gint ythickness;
 426 
 427   GdkGC *fg_gc[5];
 428   GdkGC *bg_gc[5];
 429   GdkGC *light_gc[5];
 430   GdkGC *dark_gc[5];
 431   GdkGC *mid_gc[5];
 432   GdkGC *text_gc[5];
 433   GdkGC *base_gc[5];
 434   GdkGC *text_aa_gc[5];
 435   GdkGC *black_gc;
 436   GdkGC *white_gc;
 437 
 438   GdkPixmap *bg_pixmap[5];
 439 } GtkStyle;
 440 
 441 typedef struct _GtkWidget GtkWidget;
 442 struct _GtkWidget
 443 {
 444   GtkObject object;
 445   guint16 private_flags;
 446   guint8 state;
 447   guint8 saved_state;
 448   gchar *name;
 449   GtkStyle *style;
 450   GtkRequisition requisition;
 451   GtkAllocation allocation;
 452   GdkWindow *window;
 453   GtkWidget *parent;
 454 };
 455 
 456 typedef struct
 457 {
 458   GtkWidget widget;
 459 
 460   gfloat xalign;
 461   gfloat yalign;
 462 
 463   guint16 xpad;
 464   guint16 ypad;
 465 } GtkMisc;
 466 
 467 typedef struct {
 468   GtkWidget widget;
 469   GtkWidget *focus_child;
 470   guint border_width : 16;
 471   guint need_resize : 1;
 472   guint resize_mode : 2;
 473   guint reallocate_redraws : 1;
 474   guint has_focus_chain : 1;
 475 } GtkContainer;
 476 
 477 typedef struct {
 478   GtkContainer container;
 479   GtkWidget *child;
 480 } GtkBin;
 481 
 482 typedef struct {
 483   GtkBin bin;
 484   GdkWindow *event_window;
 485   gchar *label_text;
 486   guint activate_timeout;
 487   guint constructed : 1;
 488   guint in_button : 1;
 489   guint button_down : 1;
 490   guint relief : 2;
 491   guint use_underline : 1;
 492   guint use_stock : 1;
 493   guint depressed : 1;
 494   guint depress_on_activate : 1;
 495   guint focus_on_click : 1;
 496 } GtkButton;
 497 
 498 typedef struct {
 499   GtkButton button;
 500   guint active : 1;
 501   guint draw_indicator : 1;
 502   guint inconsistent : 1;
 503 } GtkToggleButton;
 504 
 505 typedef struct _GtkAdjustment GtkAdjustment;
 506 struct _GtkAdjustment
 507 {
 508   GtkObject parent_instance;
 509 
 510   gdouble lower;
 511   gdouble upper;
 512   gdouble value;
 513   gdouble step_increment;
 514   gdouble page_increment;
 515   gdouble page_size;
 516 };
 517 
 518 typedef enum
 519 {
 520   GTK_UPDATE_CONTINUOUS,
 521   GTK_UPDATE_DISCONTINUOUS,
 522   GTK_UPDATE_DELAYED
 523 } GtkUpdateType;
 524 
 525 typedef struct _GtkRange GtkRange;
 526 struct _GtkRange
 527 {
 528   GtkWidget widget;
 529   GtkAdjustment *adjustment;
 530   GtkUpdateType update_policy;
 531   guint inverted : 1;
 532   /*< protected >*/
 533   guint flippable : 1;
 534   guint has_stepper_a : 1;
 535   guint has_stepper_b : 1;
 536   guint has_stepper_c : 1;
 537   guint has_stepper_d : 1;
 538   guint need_recalc : 1;
 539   guint slider_size_fixed : 1;
 540   gint min_slider_size;
 541   GtkOrientation orientation;
 542   GdkRectangle range_rect;
 543   gint slider_start, slider_end;
 544   gint round_digits;
 545   /*< private >*/
 546   guint trough_click_forward : 1;
 547   guint update_pending : 1;
 548   /*GtkRangeLayout * */ void *layout;
 549   /*GtkRangeStepTimer * */ void* timer;
 550   gint slide_initial_slider_position;
 551   gint slide_initial_coordinate;
 552   guint update_timeout_id;
 553   GdkWindow *event_window;
 554 };
 555 
 556 typedef struct _GtkProgressBar       GtkProgressBar;
 557 
 558 typedef enum
 559 {
 560   GTK_PROGRESS_CONTINUOUS,
 561   GTK_PROGRESS_DISCRETE
 562 } GtkProgressBarStyle;
 563 
 564 typedef enum
 565 {
 566   GTK_PROGRESS_LEFT_TO_RIGHT,
 567   GTK_PROGRESS_RIGHT_TO_LEFT,
 568   GTK_PROGRESS_BOTTOM_TO_TOP,
 569   GTK_PROGRESS_TOP_TO_BOTTOM
 570 } GtkProgressBarOrientation;
 571 
 572 typedef struct _GtkProgress       GtkProgress;
 573 
 574 struct _GtkProgress
 575 {
 576   GtkWidget widget;
 577   GtkAdjustment *adjustment;
 578   GdkPixmap     *offscreen_pixmap;
 579   gchar         *format;
 580   gfloat         x_align;
 581   gfloat         y_align;
 582   guint          show_text : 1;
 583   guint          activity_mode : 1;
 584   guint          use_text_format : 1;
 585 };
 586 
 587 struct _GtkProgressBar
 588 {
 589   GtkProgress progress;
 590   GtkProgressBarStyle bar_style;
 591   GtkProgressBarOrientation orientation;
 592   guint blocks;
 593   gint  in_block;
 594   gint  activity_pos;
 595   guint activity_step;
 596   guint activity_blocks;
 597   gdouble pulse_fraction;
 598   guint activity_dir : 1;
 599   guint ellipsize : 3;
 600 };
 601 
 602 typedef enum {
 603   GTK_RESPONSE_NONE = -1,
 604   GTK_RESPONSE_REJECT = -2,
 605   GTK_RESPONSE_ACCEPT = -3,
 606   GTK_RESPONSE_DELETE_EVENT = -4,
 607   GTK_RESPONSE_OK = -5,
 608   GTK_RESPONSE_CANCEL = -6,
 609   GTK_RESPONSE_CLOSE = -7,
 610   GTK_RESPONSE_YES = -8,
 611   GTK_RESPONSE_NO = -9,
 612   GTK_RESPONSE_APPLY = -10,
 613   GTK_RESPONSE_HELP = -11
 614 } GtkResponseType;
 615 
 616 typedef struct _GtkWindow GtkWindow;
 617 
 618 typedef struct _GtkFileChooser GtkFileChooser;
 619 
 620 typedef enum {
 621   GTK_FILE_CHOOSER_ACTION_OPEN,
 622   GTK_FILE_CHOOSER_ACTION_SAVE,
 623   GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
 624   GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
 625 } GtkFileChooserAction;
 626 
 627 typedef struct _GtkFileFilter GtkFileFilter;
 628 
 629 typedef enum {
 630   GTK_FILE_FILTER_FILENAME = 1 << 0,
 631   GTK_FILE_FILTER_URI = 1 << 1,
 632   GTK_FILE_FILTER_DISPLAY_NAME = 1 << 2,
 633   GTK_FILE_FILTER_MIME_TYPE = 1 << 3
 634 } GtkFileFilterFlags;
 635 
 636 typedef struct {
 637   GtkFileFilterFlags contains;
 638   const gchar *filename;
 639   const gchar *uri;
 640   const gchar *display_name;
 641   const gchar *mime_type;
 642 } GtkFileFilterInfo;
 643 
 644 typedef gboolean (*GtkFileFilterFunc)(const GtkFileFilterInfo *filter_info,
 645     gpointer data);
 646 
 647 typedef void (*GDestroyNotify)(gpointer data);
 648 
 649 typedef void (*GCallback)(void);
 650 
 651 typedef struct _GClosure GClosure;
 652 
 653 typedef void (*GClosureNotify)(gpointer data, GClosure *closure);
 654 
 655 typedef enum {
 656   G_CONNECT_AFTER = 1 << 0, G_CONNECT_SWAPPED = 1 << 1
 657 } GConnectFlags;
 658 
 659 typedef struct _GThreadFunctions GThreadFunctions;
 660 
 661 /*
 662  * Converts java.lang.String object to UTF-8 character string.
 663  */
 664 const char *getStrFor(JNIEnv *env, jstring value);
 665 
 666 /**
 667  * Returns :
 668  * NULL if the GLib library is compatible with the given version, or a string
 669  * describing the version mismatch.
 670  * Please note that the glib_check_version() is available since 2.6,
 671  * so you should use GLIB_CHECK_VERSION macro instead.
 672  */
 673 gchar* (*fp_glib_check_version)(guint required_major, guint required_minor,
 674                        guint required_micro);
 675 
 676 /**
 677  * Returns :
 678  *  TRUE if the GLib library is compatible with the given version
 679  */
 680 #define GLIB_CHECK_VERSION(major, minor, micro) \
 681     (fp_glib_check_version && fp_glib_check_version(major, minor, micro) == NULL)
 682 
 683 /*
 684  * Check whether the gtk2 library is available and meets the minimum
 685  * version requirement.  If the library is already loaded this method has no
 686  * effect and returns success.
 687  * Returns FALSE on failure and TRUE on success.
 688  */
 689 gboolean gtk2_check_version();
 690 
 691 /**
 692  * Returns :
 693  * NULL if the GTK+ library is compatible with the given version, or a string
 694  * describing the version mismatch.
 695  */
 696 gchar* (*fp_gtk_check_version)(guint required_major, guint required_minor,
 697                        guint required_micro);
 698 /*
 699  * Load the gtk2 library.  If the library is already loaded this method has no
 700  * effect and returns success.
 701  * Returns FALSE on failure and TRUE on success.
 702  */
 703 gboolean gtk2_load(JNIEnv *env);
 704 
 705 /*
 706  * Loads fp_gtk_show_uri function pointer. This initialization is
 707  * separated because the function is required only
 708  * for java.awt.Desktop API. The function relies on initialization in
 709  * gtk2_load, so it must be invoked only after a successful gtk2_load
 710  * invocation
 711  */
 712 gboolean gtk2_show_uri_load(JNIEnv *env);
 713 
 714 /*
 715  * Unload the gtk2 library.  If the library is already unloaded this method has
 716  * no effect and returns success.
 717  * Returns FALSE on failure and TRUE on success.
 718  */
 719 gboolean gtk2_unload();
 720 
 721 void gtk2_paint_arrow(WidgetType widget_type, GtkStateType state_type,
 722         GtkShadowType shadow_type, const gchar *detail,
 723         gint x, gint y, gint width, gint height,
 724         GtkArrowType arrow_type, gboolean fill);
 725 void gtk2_paint_box(WidgetType widget_type, GtkStateType state_type,
 726         GtkShadowType shadow_type, const gchar *detail,
 727         gint x, gint y, gint width, gint height,
 728         gint synth_state, GtkTextDirection dir);
 729 void gtk2_paint_box_gap(WidgetType widget_type, GtkStateType state_type,
 730         GtkShadowType shadow_type, const gchar *detail,
 731         gint x, gint y, gint width, gint height,
 732         GtkPositionType gap_side, gint gap_x, gint gap_width);
 733 void gtk2_paint_check(WidgetType widget_type, gint synth_state,
 734         const gchar *detail, gint x, gint y, gint width, gint height);
 735 void gtk2_paint_diamond(WidgetType widget_type, GtkStateType state_type,
 736         GtkShadowType shadow_type, const gchar *detail,
 737         gint x, gint y, gint width, gint height);
 738 void gtk2_paint_expander(WidgetType widget_type, GtkStateType state_type,
 739         const gchar *detail, gint x, gint y, gint width, gint height,
 740         GtkExpanderStyle expander_style);
 741 void gtk2_paint_extension(WidgetType widget_type, GtkStateType state_type,
 742         GtkShadowType shadow_type, const gchar *detail,
 743         gint x, gint y, gint width, gint height, GtkPositionType gap_side);
 744 void gtk2_paint_flat_box(WidgetType widget_type, GtkStateType state_type,
 745         GtkShadowType shadow_type, const gchar *detail,
 746         gint x, gint y, gint width, gint height, gboolean has_focus);
 747 void gtk2_paint_focus(WidgetType widget_type, GtkStateType state_type,
 748         const char *detail, gint x, gint y, gint width, gint height);
 749 void gtk2_paint_handle(WidgetType widget_type, GtkStateType state_type,
 750         GtkShadowType shadow_type, const gchar *detail,
 751         gint x, gint y, gint width, gint height, GtkOrientation orientation);
 752 void gtk2_paint_hline(WidgetType widget_type, GtkStateType state_type,
 753         const gchar *detail, gint x, gint y, gint width, gint height);
 754 void gtk2_paint_option(WidgetType widget_type, gint synth_state,
 755         const gchar *detail, gint x, gint y, gint width, gint height);
 756 void gtk2_paint_shadow(WidgetType widget_type, GtkStateType state_type,
 757         GtkShadowType shadow_type, const gchar *detail,
 758         gint x, gint y, gint width, gint height,
 759         gint synth_state, GtkTextDirection dir);
 760 void gtk2_paint_slider(WidgetType widget_type, GtkStateType state_type,
 761         GtkShadowType shadow_type, const gchar *detail,
 762         gint x, gint y, gint width, gint height, GtkOrientation orientation);
 763 void gtk2_paint_vline(WidgetType widget_type, GtkStateType state_type,
 764         const gchar *detail, gint x, gint y, gint width, gint height);
 765 void gtk_paint_background(WidgetType widget_type, GtkStateType state_type,
 766         gint x, gint y, gint width, gint height);
 767 
 768 void gtk2_init_painting(JNIEnv *env, gint w, gint h);
 769 gint gtk2_copy_image(gint *dest, gint width, gint height);
 770 
 771 gint gtk2_get_xthickness(JNIEnv *env, WidgetType widget_type);
 772 gint gtk2_get_ythickness(JNIEnv *env, WidgetType widget_type);
 773 gint gtk2_get_color_for_state(JNIEnv *env, WidgetType widget_type,
 774                               GtkStateType state_type, ColorType color_type);
 775 jobject gtk2_get_class_value(JNIEnv *env, WidgetType widget_type, jstring key);
 776 
 777 GdkPixbuf *gtk2_get_stock_icon(gint widget_type, const gchar *stock_id,
 778         GtkIconSize size, GtkTextDirection direction, const char *detail);
 779 GdkPixbuf *gtk2_get_icon(const gchar *filename, gint size);
 780 jstring gtk2_get_pango_font_name(JNIEnv *env, WidgetType widget_type);
 781 
 782 void flush_gtk_event_loop();
 783 
 784 jobject gtk2_get_setting(JNIEnv *env, Setting property);
 785 
 786 void gtk2_set_range_value(WidgetType widget_type, jdouble value,
 787                           jdouble min, jdouble max, jdouble visible);
 788 
 789 void (*fp_g_free)(gpointer mem);
 790 void (*fp_g_object_unref)(gpointer object);
 791 GdkWindow *(*fp_gdk_get_default_root_window) (void);
 792 
 793 int (*fp_gdk_pixbuf_get_bits_per_sample)(const GdkPixbuf *pixbuf);
 794 guchar *(*fp_gdk_pixbuf_get_pixels)(const GdkPixbuf *pixbuf);
 795 gboolean (*fp_gdk_pixbuf_get_has_alpha)(const GdkPixbuf *pixbuf);
 796 int (*fp_gdk_pixbuf_get_height)(const GdkPixbuf *pixbuf);
 797 int (*fp_gdk_pixbuf_get_n_channels)(const GdkPixbuf *pixbuf);
 798 int (*fp_gdk_pixbuf_get_rowstride)(const GdkPixbuf *pixbuf);
 799 int (*fp_gdk_pixbuf_get_width)(const GdkPixbuf *pixbuf);
 800 GdkPixbuf *(*fp_gdk_pixbuf_new_from_file)(const char *filename, GError **error);
 801 GdkColorspace (*fp_gdk_pixbuf_get_colorspace)(const GdkPixbuf *pixbuf);
 802 
 803 GdkPixbuf *(*fp_gdk_pixbuf_get_from_drawable)(GdkPixbuf *dest,
 804         GdkDrawable *src, GdkColormap *cmap, int src_x, int src_y,
 805         int dest_x, int dest_y, int width, int height);
 806 GdkPixbuf *(*fp_gdk_pixbuf_scale_simple)(GdkPixbuf *src,
 807         int dest_width, int dest_heigh, GdkInterpType interp_type);
 808 
 809 
 810 void (*fp_gtk_widget_destroy)(GtkWidget *widget);
 811 void (*fp_gtk_window_present)(GtkWindow *window);
 812 void (*fp_gtk_window_move)(GtkWindow *window, gint x, gint y);
 813 void (*fp_gtk_window_resize)(GtkWindow *window, gint width, gint height);
 814 
 815 /**
 816  * Function Pointers for GtkFileChooser
 817  */
 818 gchar* (*fp_gtk_file_chooser_get_filename)(GtkFileChooser *chooser);
 819 void (*fp_gtk_widget_hide)(GtkWidget *widget);
 820 void (*fp_gtk_main_quit)(void);
 821 GtkWidget* (*fp_gtk_file_chooser_dialog_new)(const gchar *title,
 822     GtkWindow *parent, GtkFileChooserAction action,
 823     const gchar *first_button_text, ...);
 824 gboolean (*fp_gtk_file_chooser_set_current_folder)(GtkFileChooser *chooser,
 825     const gchar *filename);
 826 gboolean (*fp_gtk_file_chooser_set_filename)(GtkFileChooser *chooser,
 827     const char *filename);
 828 void (*fp_gtk_file_chooser_set_current_name)(GtkFileChooser *chooser,
 829     const gchar *name);
 830 void (*fp_gtk_file_filter_add_custom)(GtkFileFilter *filter,
 831     GtkFileFilterFlags needed, GtkFileFilterFunc func, gpointer data,
 832     GDestroyNotify notify);
 833 void (*fp_gtk_file_chooser_set_filter)(GtkFileChooser *chooser,
 834     GtkFileFilter *filter);
 835 GType (*fp_gtk_file_chooser_get_type)(void);
 836 GtkFileFilter* (*fp_gtk_file_filter_new)(void);
 837 void (*fp_gtk_file_chooser_set_do_overwrite_confirmation)(
 838     GtkFileChooser *chooser, gboolean do_overwrite_confirmation);
 839 void (*fp_gtk_file_chooser_set_select_multiple)(
 840     GtkFileChooser *chooser, gboolean select_multiple);
 841 gchar* (*fp_gtk_file_chooser_get_current_folder)(GtkFileChooser *chooser);
 842 GSList* (*fp_gtk_file_chooser_get_filenames)(GtkFileChooser *chooser);
 843 guint (*fp_gtk_g_slist_length)(GSList *list);
 844 gulong (*fp_g_signal_connect_data)(gpointer instance,
 845     const gchar *detailed_signal, GCallback c_handler, gpointer data,
 846     GClosureNotify destroy_data, GConnectFlags connect_flags);
 847 void (*fp_gtk_widget_show)(GtkWidget *widget);
 848 void (*fp_gtk_main)(void);
 849 guint (*fp_gtk_main_level)(void);
 850 gchar* (*fp_g_path_get_dirname) (const gchar *file_name);
 851 XID (*fp_gdk_x11_drawable_get_xid) (GdkWindow *drawable);
 852 
 853 
 854 GList* (*fp_g_list_append) (GList *list, gpointer data);
 855 void (*fp_g_list_free) (GList *list);
 856 void (*fp_g_list_free_full) (GList *list, GDestroyNotify free_func);
 857 
 858 /**
 859  * This function is available for GLIB > 2.20, so it MUST be
 860  * called within GLIB_CHECK_VERSION(2, 20, 0) check.
 861  */
 862 gboolean (*fp_g_thread_get_initialized)(void);
 863 
 864 void (*fp_g_thread_init)(GThreadFunctions *vtable);
 865 void (*fp_gdk_threads_init)(void);
 866 void (*fp_gdk_threads_enter)(void);
 867 void (*fp_gdk_threads_leave)(void);
 868 
 869 gboolean (*fp_gtk_show_uri)(GdkScreen *screen, const gchar *uri,
 870     guint32 timestamp, GError **error);
 871 
 872 #endif /* !_GTK2_INTERFACE_H */