]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
code cleanup for the pen width condition (patch 1034942 + more)
[wxWidgets.git] / src / gtk1 / window.cpp
index 380f121828b86985452bb3834093dba84e0a518f..5b78c8b40e63438ad5409bf0da98dbb6f4e9aab4 100644 (file)
 #include <pango/pangox.h>
 #endif
 
 #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
 
 #ifdef __WXGTK20__
     #ifdef HAVE_XIM
@@ -632,7 +627,7 @@ static void gtk_window_draw_callback( GtkWidget *widget,
 #ifndef __WXUNIVERSAL__
     GtkPizza *pizza = GTK_PIZZA (widget);
 
 #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())
     {
         wxWindow *parent = win->GetParent();
         while (parent && !parent->IsTopLevel())
@@ -1337,24 +1332,13 @@ static void gtk_wxwindow_commit_cb (GtkIMContext *context,
     }
 
 #if wxUSE_UNICODE
     }
 
 #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
 #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
 #endif // wxUSE_UNICODE
+    if( !(const wxChar*)data )
+        return;
 
     bool ret = false;
 
 
     bool ret = false;
 
@@ -1362,16 +1346,28 @@ static void gtk_wxwindow_commit_cb (GtkIMContext *context,
     wxWindow *parent = window;
     while (parent && !parent->IsTopLevel())
         parent = parent->GetParent();
     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
     }
 }
 #endif
@@ -3625,8 +3621,16 @@ void wxWindowGTK::SetFocus()
     }
     else if (m_widget)
     {
     }
     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_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
             if (!GTK_WIDGET_REALIZED(m_widget))
             {
                 // we can't set the focus to the widget now so we remember that
@@ -3647,11 +3651,14 @@ void wxWindowGTK::SetFocus()
                 gtk_widget_grab_focus (m_widget);
             }
         }
                 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
         }
         else
+#endif
         {
            wxLogTrace(TRACE_FOCUS,
                       _T("Can't set focus to %s(%s)"),
         {
            wxLogTrace(TRACE_FOCUS,
                       _T("Can't set focus to %s(%s)"),
@@ -3943,7 +3950,7 @@ void wxWindowGTK::GtkSendPaintEvents()
     // widget to draw on
     GtkPizza *pizza = GTK_PIZZA (m_wxwindow);
 
     // 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();
     {
         // find ancestor from which to steal background
         wxWindow *parent = GetParent();