X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/086fd5603bafc43c2ccf3dae6c9902204d10c4c1..2d4b5a5e99d62f6e6fd127f8afb4e551aa9aceac:/src/x11/app.cpp diff --git a/src/x11/app.cpp b/src/x11/app.cpp index 6520be3a91..87b09f85cc 100644 --- a/src/x11/app.cpp +++ b/src/x11/app.cpp @@ -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)