X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ff6b424a2e66adde9357ed87eb3a9b9448173806..cd560c961a09a8ae80b9c32856e195ed784cc547:/src/x11/app.cpp?ds=inline diff --git a/src/x11/app.cpp b/src/x11/app.cpp index fe76481c95..34416b4f9b 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(); @@ -449,10 +449,10 @@ static Bool expose_predicate (Display *display, XEvent *xevent, XPointer arg) // wxUSE_NANOX //----------------------------------------------------------------------- -// Processes an X event. +// Processes an X event, returning TRUE if the event was processed. //----------------------------------------------------------------------- -void wxApp::ProcessXEvent(WXEvent* _event) +bool wxApp::ProcessXEvent(WXEvent* _event) { XEvent* event = (XEvent*) _event; @@ -468,7 +468,7 @@ void wxApp::ProcessXEvent(WXEvent* _event) win = wxGetWindowFromTable(window); if (!win) - return; + return FALSE; #ifdef __WXDEBUG__ wxString windowClass = win->GetClassInfo()->GetClassName(); @@ -479,7 +479,7 @@ void wxApp::ProcessXEvent(WXEvent* _event) case KeyPress: { if (!win->IsEnabled()) - return; + return FALSE; wxKeyEvent keyEvent(wxEVT_KEY_DOWN); wxTranslateKeyEvent(keyEvent, win, window, event); @@ -491,20 +491,20 @@ void wxApp::ProcessXEvent(WXEvent* _event) if (!win->GetEventHandler()->ProcessEvent( keyEvent )) { keyEvent.SetEventType(wxEVT_CHAR); - win->GetEventHandler()->ProcessEvent( keyEvent ); + if (!win->GetEventHandler()->ProcessEvent( keyEvent )) + return FALSE; } - return; + return TRUE; } case KeyRelease: { if (!win->IsEnabled()) - return; + return FALSE; wxKeyEvent keyEvent(wxEVT_KEY_UP); wxTranslateKeyEvent(keyEvent, win, window, event); - win->GetEventHandler()->ProcessEvent( keyEvent ); - return; + return win->GetEventHandler()->ProcessEvent( keyEvent ); } case ConfigureNotify: { @@ -516,20 +516,21 @@ void wxApp::ProcessXEvent(WXEvent* _event) wxSizeEvent sizeEvent( wxSize(XConfigureEventGetWidth(event), XConfigureEventGetHeight(event)), win->GetId() ); sizeEvent.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( sizeEvent ); + return win->GetEventHandler()->ProcessEvent( sizeEvent ); } + return FALSE; + break; } #if !wxUSE_NANOX case PropertyNotify: { //wxLogDebug("PropertyNotify: %s", windowClass.c_str()); - HandlePropertyChange(_event); - return; + return HandlePropertyChange(_event); } case ClientMessage: { if (!win->IsEnabled()) - return; + return FALSE; Atom wm_delete_window = XInternAtom(wxGlobalDisplay(), "WM_DELETE_WINDOW", True); Atom wm_protocols = XInternAtom(wxGlobalDisplay(), "WM_PROTOCOLS", True); @@ -539,9 +540,10 @@ void wxApp::ProcessXEvent(WXEvent* _event) if ((Atom) (event->xclient.data.l[0]) == wm_delete_window) { win->Close(FALSE); + return TRUE; } } - return; + return FALSE; } case ResizeRequest: { @@ -563,10 +565,10 @@ void wxApp::ProcessXEvent(WXEvent* _event) wxSizeEvent sizeEvent(sz, win->GetId()); sizeEvent.SetEventObject(win); - win->GetEventHandler()->ProcessEvent( sizeEvent ); + return win->GetEventHandler()->ProcessEvent( sizeEvent ); } - return; + return FALSE; } #endif #if wxUSE_NANOX @@ -575,7 +577,9 @@ void wxApp::ProcessXEvent(WXEvent* _event) if (win) { win->Close(FALSE); + return TRUE; } + return FALSE; break; } #endif @@ -606,7 +610,7 @@ void wxApp::ProcessXEvent(WXEvent* _event) win->SendEraseEvents(); - return; + return TRUE; } #if !wxUSE_NANOX case GraphicsExpose: @@ -627,7 +631,7 @@ void wxApp::ProcessXEvent(WXEvent* _event) win->SendEraseEvents(); } - return; + return TRUE; } #endif case EnterNotify: @@ -637,7 +641,7 @@ void wxApp::ProcessXEvent(WXEvent* _event) case MotionNotify: { if (!win->IsEnabled()) - return; + return FALSE; // Here we check if the top level window is // disabled, which is one aspect of modality. @@ -645,25 +649,33 @@ void wxApp::ProcessXEvent(WXEvent* _event) while (tlw && !tlw->IsTopLevel()) tlw = tlw->GetParent(); if (tlw && !tlw->IsEnabled()) - return; - + return FALSE; + if (event->type == ButtonPress) { if ((win != wxWindow::FindFocus()) && win->AcceptsFocus()) { // This might actually be done in wxWindow::SetFocus() - // and not here. + // and not here. TODO. g_prevFocus = wxWindow::FindFocus(); g_nextFocus = win; win->SetFocus(); + // return TRUE; } } - + +#if !wxUSE_NANOX + if (event->type == LeaveNotify || event->type == EnterNotify) + { + // Throw out NotifyGrab and NotifyUngrab + if (event->xcrossing.mode != NotifyNormal) + return FALSE; + } +#endif wxMouseEvent wxevent; wxTranslateMouseEvent(wxevent, win, window, event); - win->GetEventHandler()->ProcessEvent( wxevent ); - return; + return win->GetEventHandler()->ProcessEvent( wxevent ); } case FocusIn: { @@ -679,8 +691,9 @@ void wxApp::ProcessXEvent(WXEvent* _event) focusEvent.SetWindow( g_prevFocus ); g_prevFocus = NULL; - win->GetEventHandler()->ProcessEvent(focusEvent); + return win->GetEventHandler()->ProcessEvent(focusEvent); } + return FALSE; break; } case FocusOut: @@ -696,8 +709,9 @@ void wxApp::ProcessXEvent(WXEvent* _event) focusEvent.SetEventObject(win); focusEvent.SetWindow( g_nextFocus ); g_nextFocus = NULL; - win->GetEventHandler()->ProcessEvent(focusEvent); + return win->GetEventHandler()->ProcessEvent(focusEvent); } + return FALSE; break; } #ifndef wxUSE_NANOX @@ -705,6 +719,7 @@ void wxApp::ProcessXEvent(WXEvent* _event) { // Do we want to process this (for top-level windows)? // But we want to be able to veto closes, anyway + return FALSE; break; } #endif @@ -714,9 +729,11 @@ void wxApp::ProcessXEvent(WXEvent* _event) //wxString eventName = wxGetXEventName(XEvent& event); //wxLogDebug(wxT("Event %s not handled"), eventName.c_str()); #endif + return FALSE; break; } } + return FALSE; } // Returns TRUE if more time is needed. @@ -751,11 +768,12 @@ void wxApp::Dispatch() // This should be redefined in a derived class for // handling property change events for XAtom IPC. -void wxApp::HandlePropertyChange(WXEvent *event) +bool wxApp::HandlePropertyChange(WXEvent *event) { // by default do nothing special // TODO: what to do for X11 // XtDispatchEvent((XEvent*) event); + return FALSE; } void wxApp::OnIdle(wxIdleEvent& event) @@ -863,7 +881,7 @@ bool wxApp::OnInitGui() delete wxLog::SetActiveTarget(new wxLogStderr); if (!wxAppBase::OnInitGui()) - return FALSE; + return FALSE; GetMainColormap( wxApp::GetDisplay() ); @@ -902,13 +920,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)