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