Support encodings in wxGTK_CONV_BACK() in the same way as we do it in

wxGTK_CONV(), i.e. return the string containing text in ISO-8859-1 encoding
and not UTF-8 if the controls font was set to have ISO-8859-1 encoding


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44577 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-02-27 15:41:56 +00:00
parent c0da0dbabf
commit 30083ad8e7
7 changed files with 59 additions and 22 deletions

View File

@@ -28,15 +28,23 @@
#define wxGTK_CONV_ENC(s, enc) wxGTK_CONV((s))
#define wxGTK_CONV_FONT(s, font) wxGTK_CONV((s))
#define wxGTK_CONV_SYS(s) wxGTK_CONV((s))
#define wxGTK_CONV_BACK(s) wxConvUTF8.cMB2WX((s))
#define wxGTK_CONV_BACK_ENC(s, enc) wxGTK_CONV_BACK(s)
#define wxGTK_CONV_BACK_FONT(s, font) wxGTK_CONV_BACK(s)
#define wxGTK_CONV_BACK_SYS(s) wxGTK_CONV_BACK(s)
#else
#include "wx/font.h"
// convert the text in given encoding to UTF-8 used by wxGTK
// convert the text between the given encoding and UTF-8 used by wxGTK
extern wxCharBuffer
wxConvertToGTK(const wxString& s,
wxFontEncoding enc = wxFONTENCODING_SYSTEM);
extern wxCharBuffer
wxConvertFromGTK(const wxString& s,
wxFontEncoding enc = wxFONTENCODING_SYSTEM);
// helper: use the encoding of the given font if it's valid
inline wxCharBuffer wxConvertToGTK(const wxString& s, const wxFont& font)
{
@@ -44,11 +52,35 @@
: wxFONTENCODING_SYSTEM);
}
inline wxCharBuffer wxConvertFromGTK(const wxString& s, const wxFont& font)
{
return wxConvertFromGTK(s, font.Ok() ? font.GetEncoding()
: wxFONTENCODING_SYSTEM);
}
// more helpers: allow passing GTK+ strings directly
inline wxCharBuffer
wxConvertFromGTK(const wxGtkString& gs,
wxFontEncoding enc = wxFONTENCODING_SYSTEM)
{
return wxConvertFromGTK(gs.c_str(), enc);
}
inline wxCharBuffer
wxConvertFromGTK(const wxGtkString& gs, const wxFont& font)
{
return wxConvertFromGTK(gs.c_str(), font);
}
#define wxGTK_CONV(s) wxGTK_CONV_FONT((s), m_font)
#define wxGTK_CONV_ENC(s, enc) wxConvertToGTK((s), (enc))
#define wxGTK_CONV_FONT(s, font) wxConvertToGTK((s), (font))
#define wxGTK_CONV(s) wxGTK_CONV_FONT((s), m_font)
#define wxGTK_CONV_SYS(s) wxConvertToGTK((s))
#define wxGTK_CONV_BACK(s) wxConvLocal.cWC2WX(wxConvUTF8.cMB2WC((s)))
#define wxGTK_CONV_BACK(s) wxConvertFromGTK((s), m_font)
#define wxGTK_CONV_BACK_ENC(s, enc) wxConvertFromGTK((s), (enc))
#define wxGTK_CONV_BACK_FONT(s, font) wxConvertFromGTK((s), (font))
#define wxGTK_CONV_BACK_SYS(s) wxConvertFromGTK((s))
#endif
// Some deprecated GTK+ prototypes we still use often

View File

@@ -93,7 +93,7 @@ wxGtkAboutDialogOnLink(GtkAboutDialog * WXUNUSED(about),
const gchar *link,
gpointer WXUNUSED(data))
{
wxLaunchDefaultBrowser(wxGTK_CONV_BACK(link));
wxLaunchDefaultBrowser(wxGTK_CONV_BACK_SYS(link));
}
void wxAboutBox(const wxAboutDialogInfo& info)

View File

@@ -201,7 +201,7 @@ void wxFontRefData::InitFromNative()
PangoFontDescription *desc = m_nativeFontInfo.description;
// init fields
m_faceName = wxGTK_CONV_BACK( pango_font_description_get_family( desc ) );
m_faceName = wxGTK_CONV_BACK_SYS(pango_font_description_get_family(desc));
// Pango sometimes needs to have a size
int pango_size = pango_font_description_get_size( desc );

View File

@@ -1547,8 +1547,9 @@ static wxString GetGtkHotKey( const wxMenuItem& item )
default:
if ( code < 127 )
{
wxString name = wxGTK_CONV_BACK( gdk_keyval_name((guint)code) );
if ( name )
const wxString
name = wxGTK_CONV_BACK_SYS(gdk_keyval_name((guint)code));
if ( !name.empty() )
{
hotkey << name;
break;

View File

@@ -209,6 +209,17 @@ wxCharBuffer wxConvertToGTK(const wxString& s, wxFontEncoding enc)
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
// ----------------------------------------------------------------------------

View File

@@ -1158,7 +1158,7 @@ gtk_wxwindow_commit_cb (GtkIMContext *context,
window, window->m_imData->lastKeyEvent);
}
const wxWxCharBuffer data(wxGTK_CONV_BACK(str));
const wxWxCharBuffer data(wxGTK_CONV_BACK_SYS(str));
if( !data )
return;
@@ -2137,16 +2137,11 @@ void gtk_window_size_callback( GtkWidget *WXUNUSED(widget),
if ((client_width == win->m_oldClientWidth) && (client_height == win->m_oldClientHeight))
return;
#if 0
wxPrintf( wxT("size_allocate ") );
if (win->GetClassInfo() && win->GetClassInfo()->GetClassName())
wxPrintf( win->GetClassInfo()->GetClassName() );
wxPrintf( wxT(" %d %d %d %d\n"),
alloc->x,
alloc->y,
alloc->width,
alloc->height );
#endif
if ( !client_width && !client_height )
{
// the window is currently unmapped, don't generate size events
return;
}
win->m_oldClientWidth = client_width;
win->m_oldClientHeight = client_height;

View File

@@ -136,9 +136,7 @@ bool wxNativeFontInfo::GetUnderlined() const
wxString wxNativeFontInfo::GetFaceName() const
{
wxString tmp = wxGTK_CONV_BACK( pango_font_description_get_family( description ) );
return tmp;
return wxGTK_CONV_BACK_SYS(pango_font_description_get_family(description));
}
wxFontFamily wxNativeFontInfo::GetFamily() const
@@ -327,7 +325,7 @@ wxString wxNativeFontInfo::ToString() const
{
wxGtkString str(pango_font_description_to_string( description ));
return wxGTK_CONV_BACK(str);
return wxGTK_CONV_BACK_SYS(str);
}
bool wxNativeFontInfo::FromUserString(const wxString& s)