Corrected typo
[wxWidgets.git] / src / x11 / app.cpp
index 1b219236a6ea3eabbdab0372341f7451f3f82c8b..87b09f85cc3f3087008cf487b4de13ab644d1e66 100644 (file)
@@ -486,15 +486,28 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
                     
             // wxLogDebug( "OnKey from %s", win->GetName().c_str() );
         
-            // We didn't process wxEVT_KEY_DOWN, so send
-            // wxEVT_CHAR
-            if (!win->GetEventHandler()->ProcessEvent( keyEvent ))
+            // We didn't process wxEVT_KEY_DOWN, so send wxEVT_CHAR
+            if (win->GetEventHandler()->ProcessEvent( keyEvent ))
+                return TRUE;
+                
+            keyEvent.SetEventType(wxEVT_CHAR);
+            if (win->GetEventHandler()->ProcessEvent( keyEvent ))
+                return TRUE;
+            
+            if ( (keyEvent.m_keyCode == WXK_TAB) &&
+                 win->GetParent() && (win->GetParent()->HasFlag( wxTAB_TRAVERSAL)) )
             {
-                keyEvent.SetEventType(wxEVT_CHAR);
-                if (!win->GetEventHandler()->ProcessEvent( keyEvent ))
-                    return FALSE;
+                wxNavigationKeyEvent new_event;
+                new_event.SetEventObject( win->GetParent() );
+                /* GDK reports GDK_ISO_Left_Tab for SHIFT-TAB */
+                new_event.SetDirection( (keyEvent.m_keyCode == WXK_TAB) );
+                /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
+                new_event.SetWindowChange( keyEvent.ControlDown() );
+                new_event.SetCurrentFocus( win );
+                return win->GetParent()->GetEventHandler()->ProcessEvent( new_event );
             }
-            return TRUE;
+
+            return FALSE;
         }
         case KeyRelease:
         {
@@ -513,10 +526,18 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
 #endif
             {
                 //wxLogDebug("ConfigureNotify: %s", windowClass.c_str());
-                wxSizeEvent sizeEvent( wxSize(XConfigureEventGetWidth(event), XConfigureEventGetHeight(event)), win->GetId() );
-                sizeEvent.SetEventObject( win );
+                if (win->IsTopLevel())
+                {
+                    wxTopLevelWindowX11 *tlw = (wxTopLevelWindowX11 *) win;
+                    tlw->SetNeedResizeInIdle();
+                }
+                else
+                {
+                    wxSizeEvent sizeEvent( wxSize(XConfigureEventGetWidth(event), XConfigureEventGetHeight(event)), win->GetId() );
+                    sizeEvent.SetEventObject( win );
                 
-                return win->GetEventHandler()->ProcessEvent( sizeEvent );
+                    return win->GetEventHandler()->ProcessEvent( sizeEvent );
+                }
             }
             return FALSE;
             break;
@@ -545,6 +566,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
             }
             return FALSE;
         }
+#if 1
         case ResizeRequest:
         {
             /*
@@ -559,18 +581,14 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
             report = * event;
             while( XCheckTypedWindowEvent (disp, actualWindow, ResizeRequest, &report));
             
-            if (win)
-            {
-                wxSize sz = win->GetSize();
-                wxSizeEvent sizeEvent(sz, win->GetId());
-                sizeEvent.SetEventObject(win);
+            wxSize sz = win->GetSize();
+            wxSizeEvent sizeEvent(sz, win->GetId());
+            sizeEvent.SetEventObject(win);
 
-                return win->GetEventHandler()->ProcessEvent( sizeEvent );
-            }
-
-            return FALSE;
+            return win->GetEventHandler()->ProcessEvent( sizeEvent );
         }
 #endif
+#endif
 #if wxUSE_NANOX
         case GR_EVENT_TYPE_CLOSE_REQ:
         {
@@ -608,6 +626,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
             }
 #endif
 
+            // Only erase background, paint in idle time.
             win->SendEraseEvents();
 
             return TRUE;
@@ -629,6 +648,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
             {
                 // Only erase background, paint in idle time.
                 win->SendEraseEvents();
+                //win->Update();
             }
 
             return TRUE;