]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/app.cpp
Removed notebook tab flicker.
[wxWidgets.git] / src / x11 / app.cpp
index 6520be3a916ee0777398a6b89d6867d1d5796107..87b09f85cc3f3087008cf487b4de13ab644d1e66 100644 (file)
@@ -403,7 +403,7 @@ bool wxApp::Initialized()
 
 int wxApp::MainLoop()
 {
-     int rt;
+    int rt;
     m_mainLoop = new wxEventLoop;
 
     rt = m_mainLoop->Run();
@@ -468,7 +468,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
 
     win = wxGetWindowFromTable(window);
     if (!win)
-           return;
+        return FALSE;
 
 #ifdef __WXDEBUG__
     wxString windowClass = win->GetClassInfo()->GetClassName();
@@ -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;
@@ -661,7 +681,6 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
                     g_nextFocus = win;
                     
                     win->SetFocus();
-                    return TRUE;
                 }
             }
             
@@ -881,7 +900,7 @@ bool wxApp::OnInitGui()
     delete wxLog::SetActiveTarget(new wxLogStderr);
     
     if (!wxAppBase::OnInitGui())
-       return FALSE;
+    return FALSE;
     
     GetMainColormap( wxApp::GetDisplay() );
 
@@ -920,13 +939,13 @@ Window wxGetWindowParent(Window window)
 #endif
     Window* children = NULL;
 
-    // #define XQueryTree(d,w,r,p,c,nc)                GrQueryTree(w,p,c,nc)
+    // #define XQueryTree(d,w,r,p,c,nc)     GrQueryTree(w,p,c,nc)
     int res = 1;
 #if !wxUSE_NANOX
     res =
 #endif
         XQueryTree((Display*) wxGetDisplay(), window, & root, & parent,
-                        & children, & noChildren);
+             & children, & noChildren);
     if (children)
         XFree(children);
     if (res)