#ifndef _WX_DEFS_H_
#define _WX_DEFS_H_
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "defs.h"
-#endif
-
/* ---------------------------------------------------------------------------- */
/* compiler and OS identification */
/* ---------------------------------------------------------------------------- */
/* Make sure the environment is set correctly */
# if defined(__WXMSW__) && defined(__X__)
# error "Target can't be both X and Windows"
+# elif defined(__WXMSW__) && defined(__PALMOS__)
+# error "Target can't be both PalmOS and Windows"
# elif !defined(__WXMOTIF__) && \
!defined(__WXMSW__) && \
+ !defined(__WXPALMOS__)&& \
!defined(__WXGTK__) && \
!defined(__WXPM__) && \
!defined(__WXMAC__) && \
/* suppress some Visual C++ warnings */
#ifdef __VISUALC__
- /* the only "real" warning here is 4244 but there arej ust too many of them */
+ /* the only "real" warning here is 4244 but there are just too many of them */
/* in our code... one day someone should go and fix them but until then... */
# pragma warning(disable:4201) /* nonstandard extension used: nameless struct/union */
# pragma warning(disable:4244) /* conversion from double to float */
#endif
#endif /* __VISUALC__ */
-/* suppress some Watcom C++ warnings */
-#ifdef __WATCOMC__
-# pragma warning 849 9 /* Disable 'virtual function hidden' */
-# pragma warning 549 9 /* Disable 'operand contains compiler generated information' */
-#endif /* __VISUALC__ */
-
/* suppress some Salford C++ warnings */
#ifdef __SALFORDC__
# pragma suppress 353 /* Possible nested comments */
#ifndef HAVE_CONST_CAST
#define HAVE_CONST_CAST
#endif
+ #ifndef HAVE_REINTERPRET_CAST
+ #define HAVE_REINTERPRET_CAST
+ #endif
#ifndef HAVE_STATIC_CAST
#define HAVE_STATIC_CAST
#endif
#define wx_const_cast(t, x) ((t)(x))
#endif
+#ifdef HAVE_REINTERPRET_CAST
+ #define wx_reinterpret_cast(t, x) reinterpret_cast<t>(x)
+#else
+ #define wx_reinterpret_cast(t, x) ((t)(x))
+#endif
+
/* for consistency with wxStatic/DynamicCast defined in wx/object.h */
#define wxConstCast(obj, className) wx_const_cast(className *, obj)
#endif
#endif
+/* provide replacement for C99 va_copy() if the compiler doesn't have it */
+
+/* could be already defined by configure or the user */
+#ifndef wxVaCopy
+ /* if va_copy is a macro or configure detected that we have it, use it */
+ #if defined(va_copy) || defined(HAVE_VA_COPY)
+ #define wxVaCopy va_copy
+ #else /* no va_copy, try to provide a replacement */
+ /*
+ configure tries to determine whether va_list is an array or struct
+ type, but it may not be used under Windows, so deal with a few
+ special cases.
+ */
+
+ #ifdef __WATCOMC__
+ /* Watcom uses array type for va_list except for PPC and Alpha */
+ #if !defined(__PPC__) && !defined(__AXP__)
+ #define VA_LIST_IS_ARRAY
+ #endif
+ #endif /* __WATCOMC__ */
+
+ #if defined(__PPC__) && (defined(_CALL_SYSV) || defined (_WIN32))
+ /*
+ PPC using SysV ABI and NT/PPC are special in that they use an
+ extra level of indirection.
+ */
+ #define VA_LIST_IS_POINTER
+ #endif /* SysV or Win32 on __PPC__ */
+
+ /*
+ note that we use memmove(), not memcpy(), in case anybody tries
+ to do wxVaCopy(ap, ap)
+ */
+ #if defined(VA_LIST_IS_POINTER)
+ #define wxVaCopy(d, s) memmove(*(d), *(s), sizeof(va_list))
+ #elif defined(VA_LIST_IS_ARRAY)
+ #define wxVaCopy(d, s) memmove((d), (s), sizeof(va_list))
+ #else /* we can only hope that va_lists are simple lvalues */
+ #define wxVaCopy(d, s) ((d) = (s))
+ #endif
+ #endif /* va_copy/!va_copy */
+#endif // wxVaCopy
+
+
/* ---------------------------------------------------------------------------- */
/* portable calling conventions macros */
/* ---------------------------------------------------------------------------- */
/* appending the current line number to the given identifier to reduce the */
/* probability of the conflict (it may still happen if this is used in the */
/* headers, hence you should avoid doing it or provide unique prefixes then) */
-#define wxCONCAT_LINE(text) wxCONCAT(text, __LINE__)
+#if defined(__VISUALC__) && (__VISUALC__ >= 1300)
+ /*
+ __LINE__ handling is completely broken in VC++ when using "Edit and
+ Continue" (/ZI option) and results in preprocessor errors if we use it
+ inside the macros. Luckily VC7 has another standard macro which can be
+ used like this and is even better than __LINE__ because it is globally
+ unique.
+ */
+# define wxCONCAT_LINE(text) wxCONCAT(text, __COUNTER__)
+#else /* normal compilers */
+# define wxCONCAT_LINE(text) wxCONCAT(text, __LINE__)
+#endif
#define wxMAKE_UNIQUE_NAME(text) wxCONCAT_LINE(text)
/* symbolic constant used by all Find()-like functions returning positive */
*/
/* 32bit */
-#ifdef __WINDOWS__
+#ifdef __PALMOS__
+ typedef int wxInt32;
+ typedef unsigned int wxUint32;
+ #define SIZEOF_INT 4
+ #define SIZEOF_LONG 4
+ #define SIZEOF_WCHAR_T 2
+ #define SIZEOF_SIZE_T 4
+ #define wxSIZE_T_IS_UINT
+ #define SIZEOF_VOID_P 4
+ #define SIZEOF_SIZE_T 4
+#elif defined(__WINDOWS__)
/* Win64 uses LLP64 model and so ints and longs have the same size as in */
/* Win32 */
#if defined(__WIN32__)
typedef int wxInt32;
typedef unsigned int wxUint32;
- /* conside that if SIZEOF_INT is defined, all the other ones are too */
+ /* Assume that if SIZEOF_INT is defined that all the other ones except
+ SIZEOF_SIZE_T, are too. See next #if below. */
#ifndef SIZEOF_INT
#define SIZEOF_INT 4
#define SIZEOF_LONG 4
#define SIZEOF_VOID_P 4
#endif /* Win64/32 */
#endif /* !defined(SIZEOF_INT) */
+
+ /*
+ If Python.h was included first, it defines all of the SIZEOF's above
+ except for SIZEOF_SIZE_T, so we need to do it here to avoid
+ triggering the #error in the ssize_t typedefs below...
+ */
+ #ifndef SIZEOF_SIZE_T
+ #ifdef __WIN64__
+ #define SIZEOF_SIZE_T 8
+ #else /* Win32 */
+ #define SIZEOF_SIZE_T 4
+ #endif
+ #endif
#else
#error "Unsupported Windows version"
#endif
typedef int wxInt32;
typedef unsigned int wxUint32;
- #if defined(__MACH__) && !defined(SIZEOF_WCHAR_T)
- #define SIZEOF_WCHAR_T 4
- #endif
+ #if defined(__MACH__) && !defined(SIZEOF_WCHAR_T)
+ #define SIZEOF_WCHAR_T 4
+ #endif
#if wxUSE_WCHAR_T && !defined(SIZEOF_WCHAR_T)
/* also assume that sizeof(wchar_t) == 2 (under Unix the most */
/* common case is 4 but there configure would have defined */
#error "Pointers can't be stored inside integer types."
#endif
+#ifdef __cplusplus
+/* And also define a couple of simple functions to cast pointer to/from it. */
+inline wxUIntPtr wxPtrToUInt(const void *p)
+{
+ /*
+ VC++ 7.1 gives warnings about casts such as below even when they're
+ explicit with /Wp64 option, suppress them as we really know what we're
+ doing here
+ */
+#ifdef __VISUALC__
+ #pragma warning(disable: 4311) /* pointer truncation from '' to '' */
+#endif
+
+ return wx_reinterpret_cast(wxUIntPtr, p);
+
+#ifdef __VISUALC__
+ #pragma warning(default: 4311)
+#endif
+}
+
+inline void *wxUIntToPtr(wxUIntPtr p)
+{
+#ifdef __VISUALC__
+ #pragma warning(disable: 4312) /* conversion to type of greater size */
+#endif
+
+ return wx_reinterpret_cast(void *, p);
+
+#ifdef __VISUALC__
+ #pragma warning(default: 4312)
+#endif
+}
+#endif /*__cplusplus*/
+
+
/* 64 bit */
/* NB: we #define and not typedef wxLongLong_t because we want to be able to */
#endif
+/* Make sure ssize_t is defined (a signed type the same size as size_t) */
+/* HAVE_SSIZE_T should be defined for compiliers that already have it */
+#ifdef __MINGW32__
+ #include <sys/types.h>
+ #if defined(_SSIZE_T_) && !defined(HAVE_SSIZE_T)
+ #define HAVE_SSIZE_T
+ #endif
+#endif
+#ifndef HAVE_SSIZE_T
+ #if SIZEOF_SIZE_T == 4
+ typedef wxInt32 ssize_t;
+ #elif SIZEOF_SIZE_T == 8
+ typedef wxInt64 ssize_t
+ #else
+ #error "error defining ssize_t, size_t is not 4 or 8 bytes"
+ #endif
+#endif
+
+
/* base floating point types */
/* wxFloat32: 32 bit IEEE float ( 1 sign, 8 exponent bits, 23 fraction bits */
/* wxFloat64: 64 bit IEEE float ( 1 sign, 11 exponent bits, 52 fraction bits */
typedef double wxDouble;
#endif
+/*
+ Some (non standard) compilers typedef wchar_t as an existing type instead
+ of treating it as a real fundamental type, set wxWCHAR_T_IS_REAL_TYPE to 0
+ for them and to 1 for all the others.
+ */
+#if wxUSE_WCHAR_T
+ /*
+ VC++ typedefs wchar_t as unsigned short by default, that is unless
+ /Za or /Zc:wchar_t option is used in which case _WCHAR_T_DEFINED is
+ defined.
+ */
+# if defined(__VISUALC__) && !defined(_NATIVE_WCHAR_T_DEFINED)
+# define wxWCHAR_T_IS_REAL_TYPE 0
+# else /* compiler having standard-conforming wchar_t */
+# define wxWCHAR_T_IS_REAL_TYPE 1
+# endif
+#endif /* wxUSE_WCHAR_T */
+
/* ---------------------------------------------------------------------------- */
/* byte ordering related definition and macros */
/* ---------------------------------------------------------------------------- */
#define wxUINT64_SWAP_ON_BE(val) (val)
#endif
-/* Macros to convert from unsigned long to void pointer. */
-/* High order truncation occurs if the respective type is not large enough. */
-#define WXPTRULONGSLICE (((wxBYTE_ORDER==wxBIG_ENDIAN)&&(sizeof(void*)==8)&&(sizeof(unsigned long)<8))?1:0)
-#define wxPtrToULong(p) (((unsigned long*)(&(p)))[WXPTRULONGSLICE])
-#define wxULongToPtr(p,n) (p=NULL,wxPtrToULong(p)=(unsigned long)(n),p)
-
/* ---------------------------------------------------------------------------- */
/* Geometric flags */
/* ---------------------------------------------------------------------------- */
wxFIXED_MINSIZE = 0x8000,
wxTILE = 0xc000,
- // for compatibility only, default now, don't use explicitly any more
-#if WXWIN_COMPATIBILITY_2_4
+ /* for compatibility only, default now, don't use explicitly any more */
+#if WXWIN_COMPATIBILITY_2_4
wxADJUST_MINSIZE = 0x00100000
#else
wxADJUST_MINSIZE = 0
#define wxFRAME_EX_CONTEXTHELP 0x00000004
#define wxDIALOG_EX_CONTEXTHELP 0x00000004
+/* Create a window which is attachable to another top level window */
+#define wxFRAME_DRAWER 0x0020
+
/*
* MDI parent frame style flags
* Can overlap with some of the above.
#define wxSL_BOTTOM 0x0200
#define wxSL_BOTH 0x0400
#define wxSL_SELRANGE 0x0800
+#define wxSL_INVERSE 0x1000
/*
* wxScrollBar flags
#define wxNB_RIGHT 0x0040
#define wxNB_BOTTOM 0x0080
#define wxNB_MULTILINE 0x0100
+#define wxNB_DEFAULT wxNB_TOP
+
+/*
+ * wxListbook flags
+ */
+#define wxLB_DEFAULT 0x0
+#define wxLB_TOP 0x1
+#define wxLB_BOTTOM 0x2
+#define wxLB_LEFT 0x4
+#define wxLB_RIGHT 0x8
+#define wxLB_ALIGN_MASK 0xf
+
+/*
+ * wxChoicebook flags
+ */
+#define wxCHB_DEFAULT 0x0
+#define wxCHB_TOP 0x1
+#define wxCHB_BOTTOM 0x2
+#define wxCHB_LEFT 0x4
+#define wxCHB_RIGHT 0x8
+#define wxCHB_ALIGN_MASK 0xf
/*
* wxTabCtrl flags
#define wxPD_AUTO_HIDE 0x0004
#define wxPD_ELAPSED_TIME 0x0008
#define wxPD_ESTIMATED_TIME 0x0010
-/* wxGA_SMOOTH = 0x0020 may also be used with wxProgressDialog */
-/* NO!!! This is wxDIALOG_MODAL and will cause the progress dialog to */
-/* be modal. No progress will then be made at all. */
+#define wxPD_SMOOTH 0x0020
#define wxPD_REMAINING_TIME 0x0040
+#define wxPD_CAN_SKIP 0x0080
/*
* wxDirDialog styles
#define wxMORE 0x00010000
#define wxSETUP 0x00020000
+/*
+ * Background styles. See wxWindow::SetBackgroundStyle
+ */
+
+enum wxBackgroundStyle
+{
+ wxBG_STYLE_SYSTEM,
+ wxBG_STYLE_COLOUR,
+ wxBG_STYLE_CUSTOM
+};
+
/* ---------------------------------------------------------------------------- */
/* standard IDs */
/* ---------------------------------------------------------------------------- */
wxID_FILE8,
wxID_FILE9,
- /* Standard button IDs */
+ /* Standard button and menu IDs */
wxID_OK = 5100,
wxID_CANCEL,
wxID_APPLY,
wxID_ABORT,
wxID_RETRY,
wxID_IGNORE,
+ wxID_ADD,
+ wxID_REMOVE,
+
+ wxID_UP,
+ wxID_DOWN,
+ wxID_HOME,
+ wxID_REFRESH,
+ wxID_STOP,
+ wxID_INDEX,
+
+ wxID_BOLD,
+ wxID_ITALIC,
+ wxID_JUSTIFY_CENTER,
+ wxID_JUSTIFY_FILL,
+ wxID_JUSTIFY_RIGHT,
+ wxID_JUSTIFY_LEFT,
+ wxID_UNDERLINE,
+ wxID_INDENT,
+ wxID_UNINDENT,
+ wxID_ZOOM_100,
+ wxID_ZOOM_FIT,
+ wxID_ZOOM_IN,
+ wxID_ZOOM_OUT,
+ wxID_UNDELETE,
+ wxID_REVERT_TO_SAVED,
/* System menu IDs (used by wxUniv): */
wxID_SYSTEM_MENU = 5200,
wxSTIPPLE_MASK, /* mask is used for masking areas in the stipple bitmap (TO DO) */
/* drawn with a Pen, and without any Brush -- and it can be stippled. */
wxSTIPPLE = 110,
- wxBDIAGONAL_HATCH,
- wxCROSSDIAG_HATCH,
- wxFDIAGONAL_HATCH,
- wxCROSS_HATCH,
+
+ wxBDIAGONAL_HATCH, /* In wxWidgets < 2.6 use WX_HATCH macro */
+ wxCROSSDIAG_HATCH, /* to verify these wx*_HATCH are in style */
+ wxFDIAGONAL_HATCH, /* of wxBrush. In wxWidgets >= 2.6 use */
+ wxCROSS_HATCH, /* wxBrush::IsHatch() instead. */
wxHORIZONTAL_HATCH,
wxVERTICAL_HATCH,
+ wxFIRST_HATCH = wxBDIAGONAL_HATCH,
+ wxLAST_HATCH = wxVERTICAL_HATCH,
wxJOIN_BEVEL = 120,
wxJOIN_MITER,
wxCAP_BUTT
};
-/* VZ: why doesn't it start with "wx"? FIXME */
-#define IS_HATCH(s) ((s)>=wxBDIAGONAL_HATCH && (s)<=wxVERTICAL_HATCH)
+#if WXWIN_COMPATIBILITY_2_4
+ #define IS_HATCH(s) ((s)>=wxFIRST_HATCH && (s)<=wxLAST_HATCH)
+#else
+ /* use wxBrush::IsHatch() instead thought wxMotif still uses it in src/motif/dcclient.cpp */
+#endif
/* Logical ops */
typedef enum
{
- wxCLEAR, wxROP_BLACK = wxCLEAR, wxBLIT_BLACKNESS = wxCLEAR, /* 0 */
- wxXOR, wxROP_XORPEN = wxXOR, wxBLIT_SRCINVERT = wxXOR, /* src XOR dst */
- wxINVERT, wxROP_NOT = wxINVERT, wxBLIT_DSTINVERT = wxINVERT, /* NOT dst */
- wxOR_REVERSE, wxROP_MERGEPENNOT = wxOR_REVERSE, wxBLIT_00DD0228 = wxOR_REVERSE, /* src OR (NOT dst) */
- wxAND_REVERSE, wxROP_MASKPENNOT = wxAND_REVERSE, wxBLIT_SRCERASE = wxAND_REVERSE, /* src AND (NOT dst) */
- wxCOPY, wxROP_COPYPEN = wxCOPY, wxBLIT_SRCCOPY = wxCOPY, /* src */
- wxAND, wxROP_MASKPEN = wxAND, wxBLIT_SRCAND = wxAND, /* src AND dst */
- wxAND_INVERT, wxROP_MASKNOTPEN = wxAND_INVERT, wxBLIT_00220326 = wxAND_INVERT, /* (NOT src) AND dst */
- wxNO_OP, wxROP_NOP = wxNO_OP, wxBLIT_00AA0029 = wxNO_OP, /* dst */
- wxNOR, wxROP_NOTMERGEPEN = wxNOR, wxBLIT_NOTSRCERASE = wxNOR, /* (NOT src) AND (NOT dst) */
- wxEQUIV, wxROP_NOTXORPEN = wxEQUIV, wxBLIT_00990066 = wxEQUIV, /* (NOT src) XOR dst */
- wxSRC_INVERT, wxROP_NOTCOPYPEN = wxSRC_INVERT, wxBLIT_NOTSCRCOPY = wxSRC_INVERT, /* (NOT src) */
- wxOR_INVERT, wxROP_MERGENOTPEN = wxOR_INVERT, wxBLIT_MERGEPAINT = wxOR_INVERT, /* (NOT src) OR dst */
- wxNAND, wxROP_NOTMASKPEN = wxNAND, wxBLIT_007700E6 = wxNAND, /* (NOT src) OR (NOT dst) */
- wxOR, wxROP_MERGEPEN = wxOR, wxBLIT_SRCPAINT = wxOR, /* src OR dst */
- wxSET, wxROP_WHITE = wxSET, wxBLIT_WHITENESS = wxSET /* 1 */
+ wxCLEAR, wxROP_BLACK = wxCLEAR, wxBLIT_BLACKNESS = wxCLEAR, /* 0 */
+ wxXOR, wxROP_XORPEN = wxXOR, wxBLIT_SRCINVERT = wxXOR, /* src XOR dst */
+ wxINVERT, wxROP_NOT = wxINVERT, wxBLIT_DSTINVERT = wxINVERT, /* NOT dst */
+ wxOR_REVERSE, wxROP_MERGEPENNOT = wxOR_REVERSE, wxBLIT_00DD0228 = wxOR_REVERSE, /* src OR (NOT dst) */
+ wxAND_REVERSE, wxROP_MASKPENNOT = wxAND_REVERSE, wxBLIT_SRCERASE = wxAND_REVERSE, /* src AND (NOT dst) */
+ wxCOPY, wxROP_COPYPEN = wxCOPY, wxBLIT_SRCCOPY = wxCOPY, /* src */
+ wxAND, wxROP_MASKPEN = wxAND, wxBLIT_SRCAND = wxAND, /* src AND dst */
+ wxAND_INVERT, wxROP_MASKNOTPEN = wxAND_INVERT, wxBLIT_00220326 = wxAND_INVERT, /* (NOT src) AND dst */
+ wxNO_OP, wxROP_NOP = wxNO_OP, wxBLIT_00AA0029 = wxNO_OP, /* dst */
+ wxNOR, wxROP_NOTMERGEPEN = wxNOR, wxBLIT_NOTSRCERASE = wxNOR, /* (NOT src) AND (NOT dst) */
+ wxEQUIV, wxROP_NOTXORPEN = wxEQUIV, wxBLIT_00990066 = wxEQUIV, /* (NOT src) XOR dst */
+ wxSRC_INVERT, wxROP_NOTCOPYPEN = wxSRC_INVERT, wxBLIT_NOTSCRCOPY = wxSRC_INVERT, /* (NOT src) */
+ wxOR_INVERT, wxROP_MERGENOTPEN = wxOR_INVERT, wxBLIT_MERGEPAINT = wxOR_INVERT, /* (NOT src) OR dst */
+ wxNAND, wxROP_NOTMASKPEN = wxNAND, wxBLIT_007700E6 = wxNAND, /* (NOT src) OR (NOT dst) */
+ wxOR, wxROP_MERGEPEN = wxOR, wxBLIT_SRCPAINT = wxOR, /* src OR dst */
+ wxSET, wxROP_WHITE = wxSET, wxBLIT_WHITENESS = wxSET /* 1 */
} form_ops_t;
/* Flood styles */
WXK_SPACE = 32,
WXK_DELETE = 127,
+ /* These are, by design, not compatable with unicode characters.
+ If you want to get a unicode character from a key event, use
+ wxKeyEvent::GetUnicodeKey instead. */
WXK_START = 300,
WXK_LBUTTON,
WXK_RBUTTON,
typedef unsigned short WXWORD;
-//typedef void* WXWidget;
-//typedef void* WXWindow;
+/* typedef void* WXWidget; */
+/* typedef void* WXWindow; */
typedef WX_OPAQUE_TYPE(ControlRef ) * WXWidget ;
typedef WX_OPAQUE_TYPE(WindowRef) * WXWindow ;
typedef void* WXDisplay;
DECLARE_WXCOCOA_OBJC_CLASS(NSBox);
DECLARE_WXCOCOA_OBJC_CLASS(NSButton);
DECLARE_WXCOCOA_OBJC_CLASS(NSColor);
+DECLARE_WXCOCOA_OBJC_CLASS(NSColorPanel);
DECLARE_WXCOCOA_OBJC_CLASS(NSControl);
+DECLARE_WXCOCOA_OBJC_CLASS(NSCursor);
DECLARE_WXCOCOA_OBJC_CLASS(NSEvent);
+DECLARE_WXCOCOA_OBJC_CLASS(NSFontPanel);
DECLARE_WXCOCOA_OBJC_CLASS(NSImage);
DECLARE_WXCOCOA_OBJC_CLASS(NSLayoutManager);
DECLARE_WXCOCOA_OBJC_CLASS(NSMenu);
+DECLARE_WXCOCOA_OBJC_CLASS(NSMenuExtra);
DECLARE_WXCOCOA_OBJC_CLASS(NSMenuItem);
DECLARE_WXCOCOA_OBJC_CLASS(NSMutableArray);
DECLARE_WXCOCOA_OBJC_CLASS(NSNotification);
+DECLARE_WXCOCOA_OBJC_CLASS(NSObject);
DECLARE_WXCOCOA_OBJC_CLASS(NSPanel);
DECLARE_WXCOCOA_OBJC_CLASS(NSScrollView);
+DECLARE_WXCOCOA_OBJC_CLASS(NSSound);
+DECLARE_WXCOCOA_OBJC_CLASS(NSStatusItem);
DECLARE_WXCOCOA_OBJC_CLASS(NSTableColumn);
DECLARE_WXCOCOA_OBJC_CLASS(NSTableView);
DECLARE_WXCOCOA_OBJC_CLASS(NSTextContainer);
typedef WX_NSView WXWidget; /* wxWidgets BASE definition */
#endif /* __WXCOCOA__ */
-#ifdef __WXMSW__
+#if defined(__WXMSW__) || defined(__WXPALMOS__)
/* the keywords needed for WinMain() declaration */
#ifndef WXFAR
typedef struct _GtkAccelGroup GtkAccelGroup;
typedef struct _GtkItemFactory GtkItemFactory;
typedef struct _GtkSelectionData GtkSelectionData;
+typedef struct _GtkTextBuffer GtkTextBuffer;
typedef GtkWidget *WXWidget;