MSBoolean MSWidget::traverseFocus(MSWidget *pWidget_) { if (pWidget_==inputFocus()) return MSTrue; else if (pWidget_!=0) { if (pWidget_->_owner==0) { pWidget_->warpTo(); return MSTrue; } else if (pWidget_->sensitive()==MSTrue&&pWidget_->acceptFocus()==MSTrue) { return setFocus(pWidget_); } } else if (pWidget_==0) return releaseFocus(); return MSFalse; }
void ProcessEvent(SDL_Event &inEvent) { switch(inEvent.type) { case SDL_QUIT: { Event close(etQuit); sgSDLFrame->ProcessEvent(close); break; } case SDL_WINDOWEVENT: { switch (inEvent.window.event) { case SDL_WINDOWEVENT_SHOWN: { Event activate(etActivate); sgSDLFrame->ProcessEvent(activate); break; } case SDL_WINDOWEVENT_HIDDEN: { Event deactivate(etDeactivate); sgSDLFrame->ProcessEvent(deactivate); break; } case SDL_WINDOWEVENT_EXPOSED: { Event poll(etPoll); sgSDLFrame->ProcessEvent(poll); break; } //case SDL_WINDOWEVENT_MOVED: break; //case SDL_WINDOWEVENT_RESIZED: break; case SDL_WINDOWEVENT_SIZE_CHANGED: { Event resize(etResize, inEvent.window.data1, inEvent.window.data2); sgSDLFrame->Resize(inEvent.window.data1, inEvent.window.data2); sgSDLFrame->ProcessEvent(resize); break; } //case SDL_WINDOWEVENT_MINIMIZED: break; //case SDL_WINDOWEVENT_MAXIMIZED: break; //case SDL_WINDOWEVENT_RESTORED: break; //case SDL_WINDOWEVENT_ENTER: break; //case SDL_WINDOWEVENT_LEAVE: break; case SDL_WINDOWEVENT_FOCUS_GAINED: { Event inputFocus(etGotInputFocus); sgSDLFrame->ProcessEvent(inputFocus); break; } case SDL_WINDOWEVENT_FOCUS_LOST: { Event inputFocus(etLostInputFocus); sgSDLFrame->ProcessEvent(inputFocus); break; } case SDL_WINDOWEVENT_CLOSE: { Event deactivate(etDeactivate); sgSDLFrame->ProcessEvent(deactivate); Event kill(etDestroyHandler); sgSDLFrame->ProcessEvent(kill); break; } default: break; } } case SDL_MOUSEMOTION: { Event mouse(etMouseMove, inEvent.motion.x, inEvent.motion.y); #if defined(WEBOS) || defined(BLACKBERRY) mouse.value = inEvent.motion.which; mouse.flags |= efLeftDown; #else AddModStates(mouse.flags); #endif sgSDLFrame->ProcessEvent(mouse); break; } case SDL_MOUSEBUTTONDOWN: { Event mouse(etMouseDown, inEvent.button.x, inEvent.button.y, inEvent.button.button - 1); #if defined(WEBOS) || defined(BLACKBERRY) mouse.value = inEvent.motion.which; mouse.flags |= efLeftDown; #else AddModStates(mouse.flags); #endif sgSDLFrame->ProcessEvent(mouse); break; } case SDL_MOUSEBUTTONUP: { Event mouse(etMouseUp, inEvent.button.x, inEvent.button.y, inEvent.button.button - 1); #if defined(WEBOS) || defined(BLACKBERRY) mouse.value = inEvent.motion.which; #else AddModStates(mouse.flags); #endif sgSDLFrame->ProcessEvent(mouse); break; } case SDL_KEYDOWN: case SDL_KEYUP: { Event key(inEvent.type == SDL_KEYDOWN ? etKeyDown : etKeyUp ); bool right; key.value = SDLKeyToFlash(inEvent.key.keysym.sym, right); if (inEvent.type == SDL_KEYDOWN) { //key.code = key.value==keyBACKSPACE ? keyBACKSPACE : inEvent.key.keysym.unicode; key.code = inEvent.key.keysym.scancode; sLastUnicode[inEvent.key.keysym.scancode] = key.code; } else // SDL does not provide unicode on key up, so remember it, // keyed by scancode key.code = sLastUnicode[inEvent.key.keysym.scancode]; AddModStates(key.flags, inEvent.key.keysym.mod); if (right) key.flags |= efLocationRight; sgSDLFrame->ProcessEvent(key); break; } case SDL_JOYAXISMOTION: { Event joystick(etJoyAxisMove); joystick.id = inEvent.jaxis.which; joystick.code = inEvent.jaxis.axis; joystick.value = inEvent.jaxis.value; sgSDLFrame->ProcessEvent(joystick); break; } case SDL_JOYBALLMOTION: { Event joystick(etJoyBallMove, inEvent.jball.xrel, inEvent.jball.yrel); joystick.id = inEvent.jball.which; joystick.code = inEvent.jball.ball; sgSDLFrame->ProcessEvent(joystick); break; } case SDL_JOYBUTTONDOWN: { Event joystick(etJoyButtonDown); joystick.id = inEvent.jbutton.which; joystick.code = inEvent.jbutton.button; sgSDLFrame->ProcessEvent(joystick); break; } case SDL_JOYBUTTONUP: { Event joystick(etJoyButtonUp); joystick.id = inEvent.jbutton.which; joystick.code = inEvent.jbutton.button; sgSDLFrame->ProcessEvent(joystick); break; } case SDL_JOYHATMOTION: { Event joystick(etJoyHatMove); joystick.id = inEvent.jhat.which; joystick.code = inEvent.jhat.hat; joystick.value = inEvent.jhat.value; sgSDLFrame->ProcessEvent(joystick); break; } } };