#include "wx/unix/execute.h"
+#include "wx/gtk/private/timer.h"
+
#ifdef __WXDEBUG__
#include "wx/gtk/assertdlg_gtk.h"
#if wxUSE_STACKWALKER
wxCharBuffer wxConvertToGTK(const wxString& s, wxFontEncoding enc)
{
- wxCharBuffer buf;
- if ( enc == wxFONTENCODING_UTF8 )
+ wxWCharBuffer wbuf;
+ if ( enc == wxFONTENCODING_SYSTEM || enc == wxFONTENCODING_DEFAULT )
{
- // no need for conversion at all, but do check that we have a valid
- // UTF-8 string because passing invalid UTF-8 to GTK+ is going to
- // result in a GTK+ error message and, especially, loss of data which
- // was supposed to be shown in the GUI
- if ( wxConvUTF8.ToWChar(NULL, 0, s, s.length()) == wxCONV_FAILED )
- {
- // warn the programmer that something is probably wrong in his code
- //
- // NB: don't include the string in output because chances are that
- // this invalid UTF-8 string could result in more errors itself
- // if the application shows logs in the GUI and so we get into
- // an infinite loop
- wxLogDebug(_T("Invalid UTF-8 string in wxConvertToGTK()"));
-
- // but still try to show at least something on the screen
- wxMBConvUTF8 utf8permissive(wxMBConvUTF8::MAP_INVALID_UTF8_TO_OCTAL);
- wxWCharBuffer wbuf(utf8permissive.cMB2WC(s));
- buf = wxConvUTF8.cWC2MB(wbuf);
- }
- else // valid UTF-8 string, no need to convert
- {
- buf = wxCharBuffer(s);
- }
+ wbuf = wxConvUI->cMB2WC(s);
}
- else // !UTF-8
+ else // another encoding, use generic conversion class
{
- wxWCharBuffer wbuf;
- if ( enc == wxFONTENCODING_SYSTEM || enc == wxFONTENCODING_DEFAULT )
- {
- wbuf = wxConvUI->cMB2WC(s);
- }
- else // another encoding, use generic conversion class
- {
- wbuf = wxCSConv(enc).cMB2WC(s);
- }
+ wbuf = wxCSConv(enc).cMB2WC(s);
+ }
- if ( wbuf )
- buf = wxConvUTF8.cWC2MB(wbuf);
+ if ( !wbuf && !s.empty() )
+ {
+ // conversion failed, but we still want to show something to the user
+ // even if it's going to be wrong it is better than nothing
+ //
+ // we choose ISO8859-1 here arbitrarily, it's just the most common
+ // encoding probably and, also importantly here, conversion from it
+ // never fails as it's done internally by wxCSConv
+ wbuf = wxCSConv(wxFONTENCODING_ISO8859_1).cMB2WC(s);
}
- return buf;
+ return wxConvUTF8.cWC2MB(wbuf);
+}
+
+wxCharBuffer wxConvertFromGTK(const wxString& s, wxFontEncoding enc)
+{
+ // this conversion should never fail as GTK+ always uses UTF-8 internally
+ // so there are no complications here
+ const wxWCharBuffer wbuf(wxConvUTF8.cMB2WC(s));
+ if ( enc == wxFONTENCODING_SYSTEM )
+ return wxConvUI->cWC2MB(wbuf);
+
+ return wxCSConv(enc).cWC2MB(wbuf);
}
#endif // !wxUSE_UNICODE
+// Returns false if version is certainly greater or equal than major.minor.micro
+// Returns true if version is lower than major.minor.micro OR it cannot be
+// determined and one should not rely on the availability of pango version
+// major.minor.micro, nor the non-availability
+const gchar *wx_pango_version_check (int major, int minor, int micro)
+{
+#ifdef PANGO_VERSION_MAJOR
+ if (!gtk_check_version (2,11,0))
+ {
+ // GTK+ 2.11 requires Pango >= 1.15.3 and pango_version_check
+ // was added in Pango 1.15.2 thus we know for sure the pango lib we're
+ // using has the pango_version_check function:
+ return pango_version_check (major, minor, micro);
+ }
+
+ return "can't check";
+#else // !PANGO_VERSION_MAJOR
+ return "too old headers";
+#endif
+}
+
+
// ----------------------------------------------------------------------------
// subprocess routines
// ----------------------------------------------------------------------------
return wxPORT_GTK;
}
+wxTimerImpl *wxGUIAppTraits::CreateTimerImpl(wxTimer *timer)
+{
+ return new wxGTKTimerImpl(timer);
+}
+
#if wxUSE_DETECT_SM
static wxString GetSM()
{
// wxGUIAppTraits
//-----------------------------------------------------------------------------
+#if wxUSE_INTL
+void wxGUIAppTraits::SetLocale()
+{
+ gtk_set_locale();
+}
+#endif
+
#ifdef __WXDEBUG__
#if wxUSE_STACKWALKER
{
void get_stackframe_callback(StackDump *dump)
{
- dump->ProcessFrames(2); // don't show ShowAssertDialog() call itself
+ // skip over frames up to including wxOnAssert()
+ dump->ProcessFrames(3);
}
}