#include <pango/pangox.h>
#endif
-#ifdef __WXGTK20__
- #define SET_CONTAINER_FOCUS(w, d) gtk_widget_child_focus((w), (d))
-#else
- #define SET_CONTAINER_FOCUS(w, d) gtk_container_focus(GTK_CONTAINER(w), (d))
-#endif
#ifdef __WXGTK20__
#ifdef HAVE_XIM
#ifndef __WXUNIVERSAL__
GtkPizza *pizza = GTK_PIZZA (widget);
- if (win->GetThemeEnabled() && win->GetBackgroundStyle() != wxBG_STYLE_CUSTOM)
+ if (win->GetThemeEnabled() && win->GetBackgroundStyle() == wxBG_STYLE_SYSTEM)
{
wxWindow *parent = win->GetParent();
while (parent && !parent->IsTopLevel())
}
#if wxUSE_UNICODE
- event.m_uniChar = g_utf8_get_char( str );
-
- // Backward compatible for ISO-8859
- if (event.m_uniChar < 256)
- event.m_keyCode = event.m_uniChar;
- wxLogTrace(TRACE_KEYS, _T("IM sent character '%c'"), event.m_uniChar);
+ const wxWCharBuffer data = wxConvUTF8.cMB2WC( (char*)str );
#else
- wchar_t unistr[2];
- unistr[0] = g_utf8_get_char(str);
- unistr[1] = 0;
- wxCharBuffer ansistr(wxConvLocal.cWC2MB(unistr));
- // We cannot handle characters that cannot be represented in
- // current locale's charset in non-Unicode mode:
- if (ansistr.data() == NULL)
- return;
- event.m_keyCode = ansistr[0u];
- wxLogTrace(TRACE_KEYS, _T("IM sent character '%c'"), (wxChar)event.m_keyCode);
+ const wxWCharBuffer wdata = wxConvUTF8.cMB2WC( (char*)str );
+ const wxCharBuffer data = wxConvLocal.cWC2MB( wdata );
#endif // wxUSE_UNICODE
+ if( !(const wxChar*)data )
+ return;
bool ret = false;
wxWindow *parent = window;
while (parent && !parent->IsTopLevel())
parent = parent->GetParent();
- if (parent)
- {
- event.SetEventType( wxEVT_CHAR_HOOK );
- ret = parent->GetEventHandler()->ProcessEvent( event );
- }
- if (!ret)
+ for( const wxChar* pstr = data; *pstr; pstr++ )
{
- event.SetEventType(wxEVT_CHAR);
- ret = window->GetEventHandler()->ProcessEvent( event );
+#if wxUSE_UNICODE
+ event.m_uniChar = *pstr;
+ // Backward compatible for ISO-8859
+ event.m_keyCode = *pstr < 256 ? event.m_uniChar : 0;
+ wxLogTrace(TRACE_KEYS, _T("IM sent character '%c'"), event.m_uniChar);
+#else
+ event.m_keyCode = *pstr;
+#endif // wxUSE_UNICODE
+ if (parent)
+ {
+ event.SetEventType( wxEVT_CHAR_HOOK );
+ ret = parent->GetEventHandler()->ProcessEvent( event );
+ }
+
+ if (!ret)
+ {
+ event.SetEventType(wxEVT_CHAR);
+ ret = window->GetEventHandler()->ProcessEvent( event );
+ }
}
}
#endif
}
else if (m_widget)
{
+#ifdef __WXGTK20__
+ if (GTK_IS_CONTAINER(m_widget))
+ {
+ gtk_widget_child_focus( m_widget, GTK_DIR_TAB_FORWARD );
+ }
+ else
+#endif
if (GTK_WIDGET_CAN_FOCUS(m_widget) && !GTK_WIDGET_HAS_FOCUS (m_widget) )
{
+
if (!GTK_WIDGET_REALIZED(m_widget))
{
// we can't set the focus to the widget now so we remember that
gtk_widget_grab_focus (m_widget);
}
}
- else if (GTK_IS_CONTAINER(m_widget))
+ else
+#ifndef __WXGTK20__
+ if (GTK_IS_CONTAINER(m_widget))
{
- SET_CONTAINER_FOCUS( m_widget, GTK_DIR_TAB_FORWARD );
+ gtk_container_focus( GTK_CONTAINER(m_widget), GTK_DIR_TAB_FORWARD );
}
else
+#endif
{
wxLogTrace(TRACE_FOCUS,
_T("Can't set focus to %s(%s)"),
// widget to draw on
GtkPizza *pizza = GTK_PIZZA (m_wxwindow);
- if (GetThemeEnabled() && GetBackgroundStyle() != wxBG_STYLE_CUSTOM)
+ if (GetThemeEnabled() && GetBackgroundStyle() == wxBG_STYLE_SYSTEM)
{
// find ancestor from which to steal background
wxWindow *parent = GetParent();