// Writes a message to the wxLog window (stdout usually) when an internal error
// situation occurs. This function only works in DEBUG builds
-const wxChar WXDLLEXPORT *wxDbLogExtendedErrorMsg(const wxChar *userText, wxDb *pDb,
- wxChar *ErrFile, int ErrLine);
+const wxChar WXDLLEXPORT *wxDbLogExtendedErrorMsg(const wxChar *userText,
+ wxDb *pDb,
+ const wxChar *ErrFile,
+ int ErrLine);
// This function sets the sql log state for all open wxDb objects
#define wxCALLBACK
#endif // platform
-// callling convention for the qsort(3) callback
+// generic calling convention for the extern "C" functions
#if defined(__VISUALC__)
- #define wxCMPFUNC_CONV _cdecl
+ #define wxC_CALLING_CONV _cdecl
#elif defined(__VISAGECPP__)
- #define wxCMPFUNC_CONV _Optlink
+ #define wxC_CALLING_CONV _Optlink
#else // !Visual C++
- #define wxCMPFUNC_CONV
+ #define wxC_CALLING_CONV
#endif // compiler
+// callling convention for the qsort(3) callback
+#define wxCMPFUNC_CONV wxC_CALLING_CONV
+
// compatibility :-(
#define CMPFUNC_CONV wxCMPFUNC_CONV
callback compare function for quick sort
must return negative value, 0 or positive value if pItem1 <, = or > pItem2
*/
+extern "C"
+{
typedef int (wxCMPFUNC_CONV *CMPFUNC)(const void* pItem1, const void* pItem2);
+}
// ----------------------------------------------------------------------------
/**
wxDouble m_y;
};
-wxPoint2DDouble operator+(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
-wxPoint2DDouble operator-(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
-wxPoint2DDouble operator*(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
-wxPoint2DDouble operator*(wxDouble n , const wxPoint2DDouble& pt);
-wxPoint2DDouble operator*(wxInt32 n , const wxPoint2DDouble& pt);
-wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxDouble n);
-wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxInt32 n);
-wxPoint2DDouble operator/(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
-wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxDouble n);
-wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxInt32 n);
+inline wxPoint2DDouble operator+(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
+inline wxPoint2DDouble operator-(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
+inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
+inline wxPoint2DDouble operator*(wxDouble n , const wxPoint2DDouble& pt);
+inline wxPoint2DDouble operator*(wxInt32 n , const wxPoint2DDouble& pt);
+inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxDouble n);
+inline wxPoint2DDouble operator*(const wxPoint2DDouble& pt , wxInt32 n);
+inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt1 , const wxPoint2DDouble& pt2);
+inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxDouble n);
+inline wxPoint2DDouble operator/(const wxPoint2DDouble& pt , wxInt32 n);
inline wxPoint2DDouble::wxPoint2DDouble()
{
// (like sscanf() does)
// NOTE: unlike scanf family, this function only accepts
// *one* parameter !
- int ScanParam(const wxString& par, wxChar *format, void *param) const;
+ int ScanParam(const wxString& par, const wxChar *format, void *param) const;
// Returns string containing all params.
wxString GetAllParams() const;
// type of compare function for list sort operation (as in 'qsort'): it should
// return a negative value, 0 or positive value if the first element is less
// than, equal or greater than the second
+extern "C"
+{
typedef int (* LINKAGEMODE wxSortCompareFunction)(const void *elem1, const void *elem2);
+}
//
typedef int (* LINKAGEMODE wxListIterateFunction)(void *current);
*/
#if !defined(__WXMSW__)
-static char * csquery_xpm[] = {
+static const char * csquery_xpm[] = {
"12 11 2 1",
" c None",
". c #000000",
/********** wxDbLogExtendedErrorMsg() **********/
// DEBUG ONLY function
-const wxChar WXDLLEXPORT *wxDbLogExtendedErrorMsg(const wxChar *userText, wxDb *pDb,
- wxChar *ErrFile, int ErrLine)
+const wxChar WXDLLEXPORT *wxDbLogExtendedErrorMsg(const wxChar *userText,
+ wxDb *pDb,
+ const wxChar *ErrFile,
+ int ErrLine)
{
static wxString msg;
msg = userText;
-static int LINKAGEMODE CompareCharsetItems(const void *i1, const void *i2)
+extern "C" int LINKAGEMODE CompareCharsetItems(const void *i1, const void *i2)
{
return ( ((CharsetItem*)i1) -> u - ((CharsetItem*)i2) -> u );
}
#endif
#endif
+// we can't use METHODDEF here as it includes static yet the functions must be
+// extern "C" and these can't be used together!
+#undef METHODDEF
+#define METHODDEF(type) extern "C" wxC_CALLING_CONV type
+
//-----------------------------------------------------------------------------
// wxJPEGHandler
//-----------------------------------------------------------------------------
delete[] src->buffer;
}
-void jpeg_wxio_src( j_decompress_ptr cinfo, wxInputStream& infile )
-{
- my_src_ptr src;
-
- if (cinfo->src == NULL) { /* first time for this JPEG object? */
- cinfo->src = (struct jpeg_source_mgr *)
- (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
- sizeof(my_source_mgr));
- src = (my_src_ptr) cinfo->src;
- }
- src = (my_src_ptr) cinfo->src;
- src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
- src->buffer = new JOCTET[JPEG_IO_BUFFER_SIZE];
- src->pub.next_input_byte = NULL; /* until buffer loaded */
- src->stream = &infile;
-
- src->pub.init_source = my_init_source;
- src->pub.fill_input_buffer = my_fill_input_buffer;
- src->pub.skip_input_data = my_skip_input_data;
- src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
- src->pub.term_source = my_term_source;
-}
-
// JPEG error manager:
* Here's the routine that will replace the standard error_exit method:
*/
-METHODDEF(void)
-my_error_exit (j_common_ptr cinfo)
+METHODDEF(void) my_error_exit (j_common_ptr cinfo)
{
/* cinfo->err really points to a my_error_mgr struct, so coerce pointer */
my_error_ptr myerr = (my_error_ptr) cinfo->err;
longjmp(myerr->setjmp_buffer, 1);
}
+void jpeg_wxio_src( j_decompress_ptr cinfo, wxInputStream& infile )
+{
+ my_src_ptr src;
+
+ if (cinfo->src == NULL) { /* first time for this JPEG object? */
+ cinfo->src = (struct jpeg_source_mgr *)
+ (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
+ sizeof(my_source_mgr));
+ src = (my_src_ptr) cinfo->src;
+ }
+ src = (my_src_ptr) cinfo->src;
+ src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
+ src->buffer = new JOCTET[JPEG_IO_BUFFER_SIZE];
+ src->pub.next_input_byte = NULL; /* until buffer loaded */
+ src->stream = &infile;
+
+ src->pub.init_source = my_init_source;
+ src->pub.fill_input_buffer = my_fill_input_buffer;
+ src->pub.skip_input_data = my_skip_input_data;
+ src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
+ src->pub.term_source = my_term_source;
+}
+
+
// temporarily disable the warning C4611 (interaction between '_setjmp' and
// C++ object destruction is non-portable) - I don't see any dtors here
#ifdef __VISUALC__
#define PNGLINKAGEMODE LINKAGEMODE
#endif
-static void PNGLINKAGEMODE _PNG_stream_reader( png_structp png_ptr, png_bytep data, png_size_t length )
+extern "C"
+{
+
+void PNGLINKAGEMODE _PNG_stream_reader( png_structp png_ptr, png_bytep data, png_size_t length )
{
((wxInputStream*) png_get_io_ptr( png_ptr )) -> Read(data, length);
}
-static void PNGLINKAGEMODE _PNG_stream_writer( png_structp png_ptr, png_bytep data, png_size_t length )
+void PNGLINKAGEMODE _PNG_stream_writer( png_structp png_ptr, png_bytep data, png_size_t length )
{
((wxOutputStream*) png_get_io_ptr( png_ptr )) -> Write(data, length);
}
{
}
+} // extern "C"
+
// temporarily disable the warning C4611 (interaction between '_setjmp' and
// C++ object destruction is non-portable) - I don't see any dtors here
#ifdef __VISUALC__
IMPLEMENT_DYNAMIC_CLASS(wxTIFFHandler,wxImageHandler)
-static tsize_t TIFFLINKAGEMODE
+extern "C"
+{
+
+tsize_t TIFFLINKAGEMODE
_tiffNullProc(thandle_t WXUNUSED(handle),
tdata_t WXUNUSED(buf),
tsize_t WXUNUSED(size))
return (tsize_t) -1;
}
-static tsize_t TIFFLINKAGEMODE
+tsize_t TIFFLINKAGEMODE
_tiffReadProc(thandle_t handle, tdata_t buf, tsize_t size)
{
wxInputStream *stream = (wxInputStream*) handle;
return stream->LastRead();
}
-static tsize_t TIFFLINKAGEMODE
+tsize_t TIFFLINKAGEMODE
_tiffWriteProc(thandle_t handle, tdata_t buf, tsize_t size)
{
wxOutputStream *stream = (wxOutputStream*) handle;
return stream->LastWrite();
}
-static toff_t TIFFLINKAGEMODE
+toff_t TIFFLINKAGEMODE
_tiffSeekIProc(thandle_t handle, toff_t off, int whence)
{
wxInputStream *stream = (wxInputStream*) handle;
return (toff_t)stream->SeekI( (off_t)off, mode );
}
-static toff_t TIFFLINKAGEMODE
+toff_t TIFFLINKAGEMODE
_tiffSeekOProc(thandle_t handle, toff_t off, int whence)
{
wxOutputStream *stream = (wxOutputStream*) handle;
return (toff_t)stream->SeekO( (off_t)off, mode );
}
-static int TIFFLINKAGEMODE
+int TIFFLINKAGEMODE
_tiffCloseProc(thandle_t WXUNUSED(handle))
{
return 0; // ?
}
-static toff_t TIFFLINKAGEMODE
+toff_t TIFFLINKAGEMODE
_tiffSizeProc(thandle_t handle)
{
wxStreamBase *stream = (wxStreamBase*) handle;
return (toff_t) stream->GetSize();
}
-static int TIFFLINKAGEMODE
+int TIFFLINKAGEMODE
_tiffMapProc(thandle_t WXUNUSED(handle),
tdata_t* WXUNUSED(pbase),
toff_t* WXUNUSED(psize))
return 0;
}
-static void TIFFLINKAGEMODE
+void TIFFLINKAGEMODE
_tiffUnmapProc(thandle_t WXUNUSED(handle),
tdata_t WXUNUSED(base),
toff_t WXUNUSED(size))
{
}
+} // extern "C"
+
TIFF*
TIFFwxOpen(wxInputStream &stream, const char* name, const char* mode)
{
return FALSE;
}
-static int LINKAGEMODE
+extern "C" int LINKAGEMODE
wx_comparestrings(const void *arg1, const void *arg2)
{
wxChar **s1 = (wxChar **) arg1;
struct wxResourceBitListStruct
{
- wxChar *word;
+ const wxChar *word;
long bits;
};
// decoupled from wx_socket_callback and thus they suffer from a variety
// of problems. Avoid them where possible and use events instead.
-static void LINKAGEMODE wx_socket_callback(GSocket * WXUNUSED(socket),
- GSocketEvent notification,
- char *cdata)
+extern "C"
+void LINKAGEMODE wx_socket_callback(GSocket * WXUNUSED(socket),
+ GSocketEvent notification,
+ char *cdata)
{
wxSocketBase *sckobj = (wxSocketBase *)cdata;
static bool gs_sortAscending = TRUE;
// function which is called by quick sort
-static int LINKAGEMODE wxStringCompareFunction(const void *first, const void *second)
+extern "C" int LINKAGEMODE
+wxStringCompareFunction(const void *first, const void *second)
{
wxString *strFirst = (wxString *)first;
wxString *strSecond = (wxString *)second;
void syntax_error(char *WXUNUSED(s))
{
if (currentwxExprErrorHandler)
- (void)(*(currentwxExprErrorHandler))(WXEXPR_ERROR_SYNTAX, "syntax error");
+ (void)(*(currentwxExprErrorHandler))(WXEXPR_ERROR_SYNTAX, (char *)"syntax error");
if (thewxExprDatabase) thewxExprDatabase->noErrors += 1;
}
typedef struct
{
- char *name;
+ const char *name;
wxUint32 rgb;
} rgbRecord;
#endif
/* Closed folder */
-static char * icon1_xpm[] = {
+static const char * icon1_xpm[] = {
/* width height ncolors chars_per_pixel */
"16 16 6 1",
/* colors */
" "};
/* Open folder */
-static char * icon2_xpm[] = {
+static const char * icon2_xpm[] = {
/* width height ncolors chars_per_pixel */
"16 16 6 1",
/* colors */
" "};
/* File */
-static char * icon3_xpm[] = {
+static const char * icon3_xpm[] = {
/* width height ncolors chars_per_pixel */
"16 16 3 1",
/* colors */
" "};
/* Computer */
-static char * icon4_xpm[] = {
+static const char * icon4_xpm[] = {
"16 16 7 1",
" s None c None",
". c #808080",
"............o "};
/* Drive */
-static char * icon5_xpm[] = {
+static const char * icon5_xpm[] = {
"16 16 7 1",
" s None c None",
". c #808080",
" "};
/* CD-ROM */
-static char *icon6_xpm[] = {
+static const char *icon6_xpm[] = {
"16 16 10 1",
" s None c None",
". c #808080",
" "};
/* Floppy */
-static char * icon7_xpm[] = {
+static const char * icon7_xpm[] = {
"16 16 7 1",
" s None c None",
". c #808080",
" "};
/* Removeable */
-static char * icon8_xpm[] = {
+static const char * icon8_xpm[] = {
"16 16 7 1",
" s None c None",
". c #808080",
gtk_paint_box (m_wxwindow->style, GTK_PIZZA(m_wxwindow)->bin_window,
state, GTK_SHADOW_OUT,
- (GdkRectangle*) NULL, m_wxwindow, "button",
+ (GdkRectangle*) NULL, m_wxwindow,
+ (char *)"button", // const_cast
x-1, y-1, w+2, h+2);
#elif defined( __WXMAC__ )
const int m_corner = 1;
// local functions
//-----------------------------------------------------------------------------
-/* forward declaration */
-gint wxapp_idle_callback( gpointer WXUNUSED(data) );
-gint wxapp_pending_callback( gpointer WXUNUSED(data) );
-void wxapp_install_idle_handler();
+extern "C"
+{
+ gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+ gint wxapp_pending_callback( gpointer WXUNUSED(data) );
+}
-#if wxUSE_THREADS
-gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
-#endif
+void wxapp_install_thread_wakeup();
+void wxapp_uninstall_thread_wakeup();
+void wxapp_install_idle_handler();
//-----------------------------------------------------------------------------
// wxExit
// local functions
//-----------------------------------------------------------------------------
+void wxapp_install_idle_handler()
+{
+ wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
+
+ g_isIdle = FALSE;
+
+ if (g_pendingTag == 0)
+ g_pendingTag = gtk_idle_add_priority( 900, wxapp_pending_callback, (gpointer) NULL );
+
+ /* This routine gets called by all event handlers
+ indicating that the idle is over. It may also
+ get called from other thread for sending events
+ to the main thread (and processing these in
+ idle time). Very low priority. */
+
+ wxTheApp->m_idleTag = gtk_idle_add_priority( 1000, wxapp_idle_callback, (gpointer) NULL );
+}
+
+// the callback functions must be extern "C" to comply with GTK+ declarations
+extern "C"
+{
+
gint wxapp_pending_callback( gpointer WXUNUSED(data) )
{
if (!wxTheApp) return TRUE;
return FALSE;
}
-void wxapp_install_idle_handler()
+#if wxUSE_THREADS
+
+gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{
- wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
+ // when getting called from GDK's time-out handler
+ // we are no longer within GDK's grab on the GUI
+ // thread so we must lock it here ourselves
+ gdk_threads_enter();
- g_isIdle = FALSE;
+ wxapp_uninstall_thread_wakeup();
- if (g_pendingTag == 0)
- g_pendingTag = gtk_idle_add_priority( 900, wxapp_pending_callback, (gpointer) NULL );
+ // unblock other threads wishing to do some GUI things
+ wxMutexGuiLeave();
- /* This routine gets called by all event handlers
- indicating that the idle is over. It may also
- get called from other thread for sending events
- to the main thread (and processing these in
- idle time). Very low priority. */
+ g_mainThreadLocked = TRUE;
- wxTheApp->m_idleTag = gtk_idle_add_priority( 1000, wxapp_idle_callback, (gpointer) NULL );
+ // wake up other threads
+ wxUsleep( 1 );
+
+ // block other thread again
+ wxMutexGuiEnter();
+
+ g_mainThreadLocked = FALSE;
+
+ wxapp_install_thread_wakeup();
+
+ // release lock again
+ gdk_threads_leave();
+
+ return TRUE;
}
+#endif // wxUSE_THREADS
+
+} // extern "C"
+
#if wxUSE_THREADS
static int g_threadUninstallLevel = 0;
wxTheApp->m_wakeUpTimerTag = 0;
}
-gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
-{
- // when getting called from GDK's time-out handler
- // we are no longer within GDK's grab on the GUI
- // thread so we must lock it here ourselves
- gdk_threads_enter();
-
- wxapp_uninstall_thread_wakeup();
-
- // unblock other threads wishing to do some GUI things
- wxMutexGuiLeave();
-
- g_mainThreadLocked = TRUE;
-
- // wake up other threads
- wxUsleep( 1 );
-
- // block other thread again
- wxMutexGuiEnter();
-
- g_mainThreadLocked = FALSE;
-
- wxapp_install_thread_wakeup();
-
- // release lock again
- gdk_threads_leave();
-
- return TRUE;
-}
-
#endif // wxUSE_THREADS
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/* XPM */
-static char * page_xpm[] = {
+static const char * page_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 5 1",
/* colors */
entry.accelerator = (gchar*) NULL;
entry.callback = (GtkItemFactoryCallback) NULL;
entry.callback_action = 0;
- entry.item_type = "<Branch>";
+ entry.item_type = (char *)"<Branch>";
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
/* in order to get the pointer to the item we need the item text _without_ underscores */
if(m_style & wxMENU_TEAROFF)
{
GtkItemFactoryEntry entry;
- entry.path = "/tearoff";
+ entry.path = (char *)"/tearoff";
entry.callback = (GtkItemFactoryCallback) NULL;
entry.callback_action = 0;
- entry.item_type = "<Tearoff>";
+ entry.item_type = (char *)"<Tearoff>";
entry.accelerator = (gchar*) NULL;
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
//GtkWidget *menuItem = gtk_item_factory_get_widget( m_factory, "<main>/tearoff" );
{
#if (GTK_MINOR_VERSION > 0)
GtkItemFactoryEntry entry;
- entry.path = "/sep";
+ entry.path = (char *)"/sep";
entry.callback = (GtkItemFactoryCallback) NULL;
entry.callback_action = 0;
- entry.item_type = "<Separator>";
+ entry.item_type = (char *)"<Separator>";
entry.accelerator = (gchar*) NULL;
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
entry.path = buf;
entry.callback = (GtkItemFactoryCallback) 0;
entry.callback_action = 0;
- entry.item_type = "<Branch>";
+ entry.item_type = (char *)"<Branch>";
entry.accelerator = (gchar*) NULL;
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
entry.callback = (GtkItemFactoryCallback) gtk_menu_clicked_callback;
entry.callback_action = 0;
if ( mitem->IsCheckable() )
- entry.item_type = "<CheckItem>";
+ entry.item_type = (char *)"<CheckItem>";
else
- entry.item_type = "<Item>";
+ entry.item_type = (char *)"<Item>";
entry.accelerator = (gchar*) NULL;
#if wxUSE_ACCEL
#include <gtk/gtkmenu.h>
#include <gtk/gtkcontainer.h>
+extern "C"
+{
+
static void gtk_pixmap_menu_item_class_init (GtkPixmapMenuItemClass *klass);
static void gtk_pixmap_menu_item_init (GtkPixmapMenuItem *menu_item);
static void gtk_pixmap_menu_item_draw (GtkWidget *widget,
static GtkMenuItemClass *parent_class = NULL;
+}
+
#define BORDER_SPACING 3
#define PMAP_WIDTH 20
{
GtkTypeInfo pixmap_menu_item_info =
{
- "GtkPixmapMenuItem",
+ (char *)"GtkPixmapMenuItem",
sizeof (GtkPixmapMenuItem),
sizeof (GtkPixmapMenuItemClass),
(GtkClassInitFunc) gtk_pixmap_menu_item_class_init,
// wxMiniFrame
//-----------------------------------------------------------------------------
-static char *cross_xpm[] = {
+static const char *cross_xpm[] = {
/* columns rows colors chars-per-pixel */
"5 5 16 1",
" c Gray0",
((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
{
GdkBitmap *mask = (GdkBitmap*) NULL;
- GdkPixmap *pixmap = gdk_pixmap_create_from_xpm_d( wxGetRootWindow()->window, &mask, NULL, cross_xpm );
+ GdkPixmap *pixmap = gdk_pixmap_create_from_xpm_d
+ (
+ wxGetRootWindow()->window,
+ &mask,
+ NULL,
+ (char **)cross_xpm
+ );
GtkWidget *pw = gtk_pixmap_new( pixmap, mask );
gdk_bitmap_unref( mask );
IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
-static gint timeout_callback( gpointer data )
+extern "C" gint timeout_callback( gpointer data )
{
wxTimer *timer = (wxTimer*)data;
{
GtkPizza *pizza = GTK_PIZZA(widget);
- gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, &gdk_event->area, win->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (win->m_widget->style,
+ pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ &gdk_event->area,
+ win->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
return TRUE;
}
{
GtkPizza *pizza = GTK_PIZZA(widget);
- gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, rect, win->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (win->m_widget->style,
+ pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ rect,
+ win->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
}
// ----------------------------------------------------------------------------
// subprocess routines
// ----------------------------------------------------------------------------
-static void GTK_EndProcessDetector(gpointer data, gint source,
- GdkInputCondition WXUNUSED(condition) )
+extern "C"
+void GTK_EndProcessDetector(gpointer data, gint source,
+ GdkInputCondition WXUNUSED(condition) )
{
wxEndProcessData *proc_data = (wxEndProcessData *)data;
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_PIZZA (container));
- g_return_if_fail (callback != NULL);
+ g_return_if_fail (callback != (GtkCallback)NULL);
pizza = GTK_PIZZA (container);
if (!parent)
parent = win;
- gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, &gdk_event->area, parent->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (parent->m_widget->style,
+ pizza->bin_window,
+ GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ &gdk_event->area,
+ parent->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
}
win->GetUpdateRegion().Union( gdk_event->area.x,
if (!parent)
parent = win;
- gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, rect, parent->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (parent->m_widget->style,
+ pizza->bin_window,
+ GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ rect,
+ parent->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
}
#if wxUSE_MENUS_NATIVE
-static void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting )
+extern "C"
+void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting )
{
*is_waiting = FALSE;
}
bool is_waiting = TRUE;
- gtk_signal_connect( GTK_OBJECT(menu->m_menu), "hide",
- GTK_SIGNAL_FUNC(gtk_pop_hide_callback), (gpointer)&is_waiting );
+ gtk_signal_connect( GTK_OBJECT(menu->m_menu),
+ "hide",
+ GTK_SIGNAL_FUNC(gtk_pop_hide_callback),
+ (gpointer)&is_waiting );
gtk_menu_popup(
GTK_MENU(menu->m_menu),
// local functions
//-----------------------------------------------------------------------------
-/* forward declaration */
-gint wxapp_idle_callback( gpointer WXUNUSED(data) );
-gint wxapp_pending_callback( gpointer WXUNUSED(data) );
-void wxapp_install_idle_handler();
+extern "C"
+{
+ gint wxapp_idle_callback( gpointer WXUNUSED(data) );
+ gint wxapp_pending_callback( gpointer WXUNUSED(data) );
+}
-#if wxUSE_THREADS
-gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) );
-#endif
+void wxapp_install_thread_wakeup();
+void wxapp_uninstall_thread_wakeup();
+void wxapp_install_idle_handler();
//-----------------------------------------------------------------------------
// wxExit
// local functions
//-----------------------------------------------------------------------------
+void wxapp_install_idle_handler()
+{
+ wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
+
+ g_isIdle = FALSE;
+
+ if (g_pendingTag == 0)
+ g_pendingTag = gtk_idle_add_priority( 900, wxapp_pending_callback, (gpointer) NULL );
+
+ /* This routine gets called by all event handlers
+ indicating that the idle is over. It may also
+ get called from other thread for sending events
+ to the main thread (and processing these in
+ idle time). Very low priority. */
+
+ wxTheApp->m_idleTag = gtk_idle_add_priority( 1000, wxapp_idle_callback, (gpointer) NULL );
+}
+
+// the callback functions must be extern "C" to comply with GTK+ declarations
+extern "C"
+{
+
gint wxapp_pending_callback( gpointer WXUNUSED(data) )
{
if (!wxTheApp) return TRUE;
return FALSE;
}
-void wxapp_install_idle_handler()
+#if wxUSE_THREADS
+
+gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
{
- wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
+ // when getting called from GDK's time-out handler
+ // we are no longer within GDK's grab on the GUI
+ // thread so we must lock it here ourselves
+ gdk_threads_enter();
- g_isIdle = FALSE;
+ wxapp_uninstall_thread_wakeup();
- if (g_pendingTag == 0)
- g_pendingTag = gtk_idle_add_priority( 900, wxapp_pending_callback, (gpointer) NULL );
+ // unblock other threads wishing to do some GUI things
+ wxMutexGuiLeave();
- /* This routine gets called by all event handlers
- indicating that the idle is over. It may also
- get called from other thread for sending events
- to the main thread (and processing these in
- idle time). Very low priority. */
+ g_mainThreadLocked = TRUE;
- wxTheApp->m_idleTag = gtk_idle_add_priority( 1000, wxapp_idle_callback, (gpointer) NULL );
+ // wake up other threads
+ wxUsleep( 1 );
+
+ // block other thread again
+ wxMutexGuiEnter();
+
+ g_mainThreadLocked = FALSE;
+
+ wxapp_install_thread_wakeup();
+
+ // release lock again
+ gdk_threads_leave();
+
+ return TRUE;
}
+#endif // wxUSE_THREADS
+
+} // extern "C"
+
#if wxUSE_THREADS
static int g_threadUninstallLevel = 0;
wxTheApp->m_wakeUpTimerTag = 0;
}
-gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
-{
- // when getting called from GDK's time-out handler
- // we are no longer within GDK's grab on the GUI
- // thread so we must lock it here ourselves
- gdk_threads_enter();
-
- wxapp_uninstall_thread_wakeup();
-
- // unblock other threads wishing to do some GUI things
- wxMutexGuiLeave();
-
- g_mainThreadLocked = TRUE;
-
- // wake up other threads
- wxUsleep( 1 );
-
- // block other thread again
- wxMutexGuiEnter();
-
- g_mainThreadLocked = FALSE;
-
- wxapp_install_thread_wakeup();
-
- // release lock again
- gdk_threads_leave();
-
- return TRUE;
-}
-
#endif // wxUSE_THREADS
//-----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/* XPM */
-static char * page_xpm[] = {
+static const char * page_xpm[] = {
/* width height ncolors chars_per_pixel */
"32 32 5 1",
/* colors */
entry.accelerator = (gchar*) NULL;
entry.callback = (GtkItemFactoryCallback) NULL;
entry.callback_action = 0;
- entry.item_type = "<Branch>";
+ entry.item_type = (char *)"<Branch>";
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
/* in order to get the pointer to the item we need the item text _without_ underscores */
if(m_style & wxMENU_TEAROFF)
{
GtkItemFactoryEntry entry;
- entry.path = "/tearoff";
+ entry.path = (char *)"/tearoff";
entry.callback = (GtkItemFactoryCallback) NULL;
entry.callback_action = 0;
- entry.item_type = "<Tearoff>";
+ entry.item_type = (char *)"<Tearoff>";
entry.accelerator = (gchar*) NULL;
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
//GtkWidget *menuItem = gtk_item_factory_get_widget( m_factory, "<main>/tearoff" );
{
#if (GTK_MINOR_VERSION > 0)
GtkItemFactoryEntry entry;
- entry.path = "/sep";
+ entry.path = (char *)"/sep";
entry.callback = (GtkItemFactoryCallback) NULL;
entry.callback_action = 0;
- entry.item_type = "<Separator>";
+ entry.item_type = (char *)"<Separator>";
entry.accelerator = (gchar*) NULL;
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
entry.path = buf;
entry.callback = (GtkItemFactoryCallback) 0;
entry.callback_action = 0;
- entry.item_type = "<Branch>";
+ entry.item_type = (char *)"<Branch>";
entry.accelerator = (gchar*) NULL;
gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */
entry.callback = (GtkItemFactoryCallback) gtk_menu_clicked_callback;
entry.callback_action = 0;
if ( mitem->IsCheckable() )
- entry.item_type = "<CheckItem>";
+ entry.item_type = (char *)"<CheckItem>";
else
- entry.item_type = "<Item>";
+ entry.item_type = (char *)"<Item>";
entry.accelerator = (gchar*) NULL;
#if wxUSE_ACCEL
#include <gtk/gtkmenu.h>
#include <gtk/gtkcontainer.h>
+extern "C"
+{
+
static void gtk_pixmap_menu_item_class_init (GtkPixmapMenuItemClass *klass);
static void gtk_pixmap_menu_item_init (GtkPixmapMenuItem *menu_item);
static void gtk_pixmap_menu_item_draw (GtkWidget *widget,
static GtkMenuItemClass *parent_class = NULL;
+}
+
#define BORDER_SPACING 3
#define PMAP_WIDTH 20
{
GtkTypeInfo pixmap_menu_item_info =
{
- "GtkPixmapMenuItem",
+ (char *)"GtkPixmapMenuItem",
sizeof (GtkPixmapMenuItem),
sizeof (GtkPixmapMenuItemClass),
(GtkClassInitFunc) gtk_pixmap_menu_item_class_init,
// wxMiniFrame
//-----------------------------------------------------------------------------
-static char *cross_xpm[] = {
+static const char *cross_xpm[] = {
/* columns rows colors chars-per-pixel */
"5 5 16 1",
" c Gray0",
((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
{
GdkBitmap *mask = (GdkBitmap*) NULL;
- GdkPixmap *pixmap = gdk_pixmap_create_from_xpm_d( wxGetRootWindow()->window, &mask, NULL, cross_xpm );
+ GdkPixmap *pixmap = gdk_pixmap_create_from_xpm_d
+ (
+ wxGetRootWindow()->window,
+ &mask,
+ NULL,
+ (char **)cross_xpm
+ );
GtkWidget *pw = gtk_pixmap_new( pixmap, mask );
gdk_bitmap_unref( mask );
IMPLEMENT_ABSTRACT_CLASS(wxTimer, wxObject)
-static gint timeout_callback( gpointer data )
+extern "C" gint timeout_callback( gpointer data )
{
wxTimer *timer = (wxTimer*)data;
{
GtkPizza *pizza = GTK_PIZZA(widget);
- gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, &gdk_event->area, win->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (win->m_widget->style,
+ pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ &gdk_event->area,
+ win->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
return TRUE;
}
{
GtkPizza *pizza = GTK_PIZZA(widget);
- gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, rect, win->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (win->m_widget->style,
+ pizza->bin_window, GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ rect,
+ win->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
}
// ----------------------------------------------------------------------------
// subprocess routines
// ----------------------------------------------------------------------------
-static void GTK_EndProcessDetector(gpointer data, gint source,
- GdkInputCondition WXUNUSED(condition) )
+extern "C"
+void GTK_EndProcessDetector(gpointer data, gint source,
+ GdkInputCondition WXUNUSED(condition) )
{
wxEndProcessData *proc_data = (wxEndProcessData *)data;
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_PIZZA (container));
- g_return_if_fail (callback != NULL);
+ g_return_if_fail (callback != (GtkCallback)NULL);
pizza = GTK_PIZZA (container);
if (!parent)
parent = win;
- gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, &gdk_event->area, parent->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (parent->m_widget->style,
+ pizza->bin_window,
+ GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ &gdk_event->area,
+ parent->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
}
win->GetUpdateRegion().Union( gdk_event->area.x,
if (!parent)
parent = win;
- gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL,
- GTK_SHADOW_NONE, rect, parent->m_widget, "base", 0, 0, -1, -1);
+ gtk_paint_flat_box (parent->m_widget->style,
+ pizza->bin_window,
+ GTK_STATE_NORMAL,
+ GTK_SHADOW_NONE,
+ rect,
+ parent->m_widget,
+ (char *)"base",
+ 0, 0, -1, -1);
}
#if wxUSE_MENUS_NATIVE
-static void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting )
+extern "C"
+void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting )
{
*is_waiting = FALSE;
}
bool is_waiting = TRUE;
- gtk_signal_connect( GTK_OBJECT(menu->m_menu), "hide",
- GTK_SIGNAL_FUNC(gtk_pop_hide_callback), (gpointer)&is_waiting );
+ gtk_signal_connect( GTK_OBJECT(menu->m_menu),
+ "hide",
+ GTK_SIGNAL_FUNC(gtk_pop_hide_callback),
+ (gpointer)&is_waiting );
gtk_menu_popup(
GTK_MENU(menu->m_menu),
-static int LINKAGEMODE IndexCompareFunc(const void *a, const void *b)
+extern "C" int LINKAGEMODE
+wxHtmlHelpIndexCompareFunc(const void *a, const void *b)
{
return wxStricmp(((wxHtmlContentsItem*)a)->m_Name, ((wxHtmlContentsItem*)b)->m_Name);
}
m_BookRecords.Add(bookr);
if (m_IndexCnt > 0)
- qsort(m_Index, m_IndexCnt, sizeof(wxHtmlContentsItem), IndexCompareFunc);
+ qsort(m_Index, m_IndexCnt, sizeof(wxHtmlContentsItem), wxHtmlHelpIndexCompareFunc);
return TRUE;
}
unsigned code;
};
-static int LINKAGEMODE compar_entity(const void *key, const void *item)
+extern "C" int LINKAGEMODE wxHtmlEntityCompare(const void *key, const void *item)
{
return wxStrcmp((wxChar*)key, ((wxHtmlEntityInfo*)item)->name);
}
info = (wxHtmlEntityInfo*) bsearch(entity.c_str(), substitutions,
substitutions_cnt,
sizeof(wxHtmlEntityInfo),
- compar_entity);
+ wxHtmlEntityCompare);
if (info)
code = info->code;
}
return m_ParamValues[index];
}
-int wxHtmlTag::ScanParam(const wxString& par, wxChar *format, void *param) const
+int wxHtmlTag::ScanParam(const wxString& par,
+ const wxChar *format,
+ void *param) const
{
wxString parval = GetParam(par);
return wxSscanf(parval, format, param);
// wxThread (Posix implementation)
//--------------------------------------------------------------------
+#if HAVE_THREAD_CLEANUP_FUNCTIONS
+
+// thread exit function
+extern "C" void wxPthreadCleanup(void *ptr);
+
+#endif // HAVE_THREAD_CLEANUP_FUNCTIONS
+
class wxThreadInternal
{
public:
// thread entry function
static void *PthreadStart(void *ptr);
-#if HAVE_THREAD_CLEANUP_FUNCTIONS
- // thread exit function
- static void PthreadCleanup(void *ptr);
-#endif
-
// thread actions
// start the thread
wxThreadError Run();
// sometimes - tell the thread that it should do it
void Notify() { m_shouldBroadcast = TRUE; }
+#if HAVE_THREAD_CLEANUP_FUNCTIONS
+ // this is used by wxPthreadCleanup() only
+ static void Cleanup(wxThread *thread);
+#endif // HAVE_THREAD_CLEANUP_FUNCTIONS
+
private:
pthread_t m_threadId; // id of the thread
wxThreadState m_state; // see wxThreadState enum
#if HAVE_THREAD_CLEANUP_FUNCTIONS
// install the cleanup handler which will be called if the thread is
// cancelled
- pthread_cleanup_push(wxThreadInternal::PthreadCleanup, ptr);
+ pthread_cleanup_push(wxPthreadCleanup, ptr);
#endif // HAVE_THREAD_CLEANUP_FUNCTIONS
// wait for the condition to be signaled from Run()
pthread->GetId());
// change the state of the thread to "exited" so that
- // PthreadCleanup handler won't do anything from now (if it's
+ // wxPthreadCleanup handler won't do anything from now (if it's
// called before we do pthread_cleanup_pop below)
pthread->SetState(STATE_EXITED);
}
#if HAVE_THREAD_CLEANUP_FUNCTIONS
// this handler is called when the thread is cancelled
-void wxThreadInternal::PthreadCleanup(void *ptr)
+extern "C" void wxPthreadCleanup(void *ptr)
{
- wxThread *thread = (wxThread *) ptr;
+ wxThreadInternal::Cleanup((wxThread *)ptr);
+}
+void wxThreadInternal::Cleanup(wxThread *thread)
+{
{
wxCriticalSectionLocker lock(thread->m_critsect);
if ( thread->m_internal->GetState() == STATE_EXITED )
if ( m_isDetached )
{
// if we use cleanup function, this will be done from
- // PthreadCleanup()
+ // wxPthreadCleanup()
#if !HAVE_THREAD_CLEANUP_FUNCTIONS
ScheduleThreadForDeletion();
#include <signal.h>
-static void wxFatalSignalHandler(wxTYPE_SA_HANDLER)
+extern "C" void wxFatalSignalHandler(wxTYPE_SA_HANDLER)
{
if ( wxTheApp )
{