void AppActivate(BOOL fActive, BOOL minimize) { Minimized = minimize; Key_ClearStates(); // we don't want to act like we're active if we're minimized if (fActive && !Minimized) ActiveApp = true; else ActiveApp = false; // minimize/restore mouse-capture on demand if (!ActiveApp) { IN_Activate (false); CDAudio_Activate (false); S_Activate (false); if ( win_noalttab->value ) { WIN_EnableAltTab(); } } else { IN_Activate (true); CDAudio_Activate (true); S_Activate (true); if ( win_noalttab->value ) { WIN_DisableAltTab(); } } }
/* * S_HandleActivateCmd */ static unsigned S_HandleActivateCmd( const sndActivateCmd_t *cmd ) { //Com_Printf("S_HandleActivateCmd\n"); S_Clear(); S_Activate( cmd->active ? qtrue : qfalse ); return sizeof( *cmd ); }
/* ======================== Android_RunEvents Execute all events from queue ======================== */ void Android_RunEvents() { int i; // enter events read Android_Lock(); pthread_mutex_unlock( &events.framemutex ); for( i = 0; i < events.count; i++ ) { switch( events.queue[i].type ) { case event_touch_down: case event_touch_up: case event_touch_move: IN_TouchEvent( events.queue[i].type, events.queue[i].arg, events.queue[i].touch.x, events.queue[i].touch.y, events.queue[i].touch.dx, events.queue[i].touch.dy ); break; case event_key_down: Key_Event( events.queue[i].arg, true ); break; case event_key_up: Key_Event( events.queue[i].arg, false ); break; case event_set_pause: // destroy EGL surface when hiding application if( !events.queue[i].arg ) { host.state = HOST_FRAME; S_Activate( true ); (*jni.env)->CallStaticVoidMethod( jni.env, jni.actcls, jni.toggleEGL, 1 ); Android_UpdateSurface(); Android_SwapInterval( Cvar_VariableInteger( "gl_swapinterval" ) ); } if( events.queue[i].arg ) { host.state = HOST_NOFOCUS; S_Activate( false ); (*jni.env)->CallStaticVoidMethod( jni.env, jni.actcls, jni.toggleEGL, 0 ); negl.valid = false; } break; case event_resize: // reinitialize EGL and change engine screen size if( host.state == HOST_NORMAL && ( scr_width->integer != jni.width || scr_height->integer != jni.height ) ) { (*jni.env)->CallStaticVoidMethod( jni.env, jni.actcls, jni.toggleEGL, 0 ); (*jni.env)->CallStaticVoidMethod( jni.env, jni.actcls, jni.toggleEGL, 1 ); Android_UpdateSurface(); Android_SwapInterval( Cvar_VariableInteger( "gl_swapinterval" ) ); VID_SetMode(); } break; case event_joyadd: Joy_AddEvent( events.queue[i].arg ); break; case event_joyremove: Joy_RemoveEvent( events.queue[i].arg ); break; case event_joyball: Joy_BallMotionEvent( events.queue[i].arg, events.queue[i].ball.ball, events.queue[i].ball.xrel, events.queue[i].ball.yrel ); break; case event_joyhat: Joy_HatMotionEvent( events.queue[i].arg, events.queue[i].hat.hat, events.queue[i].hat.key ); break; case event_joyaxis: Joy_AxisMotionEvent( events.queue[i].arg, events.queue[i].axis.axis, events.queue[i].axis.val ); break; case event_joybutton: Joy_ButtonEvent( events.queue[i].arg, events.queue[i].button.button, (byte)events.queue[i].button.down ); break; } } events.count = 0; // no more events // text input handled separately to allow unicode symbols for( i = 0; events.inputtext[i]; i++ ) { int ch; // if engine does not use utf-8, we need to convert it to preferred encoding if( !Q_stricmp( cl_charset->string, "utf-8" ) ) ch = (unsigned char)events.inputtext[i]; else ch = Con_UtfProcessCharForce( (unsigned char)events.inputtext[i] ); if( !ch ) continue; // otherwise just push it by char, text render will decode unicode strings Con_CharEvent( ch ); if( cls.key_dest == key_menu ) UI_CharEvent ( ch ); } events.inputtext[0] = 0; // no more text //end events read Android_Unlock(); pthread_mutex_lock( &events.framemutex ); }