X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=vid_agl.c;h=8a765011f38241ef3d58e785470b8f42a0205eda;hb=d5979b15410a801c2307b5bbfb3ca4279938a199;hp=d88188713ad26a2a5ddcd97f0f7e48a3f60267ac;hpb=4ee3e3c6cf65e316a2caa9a1cd4a12297980c253;p=xonotic%2Fdarkplaces.git diff --git a/vid_agl.c b/vid_agl.c index d8818871..8a765011 100644 --- a/vid_agl.c +++ b/vid_agl.c @@ -53,6 +53,8 @@ static float mouse_x, mouse_y; static qboolean vid_isfullscreen = false; static qboolean vid_usingvsync = false; +static qboolean sound_active = true; + static int scr_width, scr_height; static AGLContext context; @@ -136,8 +138,11 @@ void VID_Finish (qboolean allowmousegrab) if (r_render.integer) { + CHECKGLERROR if (r_speeds.integer || gl_finish.integer) - qglFinish(); + { + qglFinish();CHECKGLERROR + } qaglSwapBuffers(context); } VID_UpdateGamma(false, GAMMA_TABLE_SIZE); @@ -322,21 +327,37 @@ static OSStatus MainWindowEventHandler (EventHandlerCallRef nextHandler, EventRe return err; } +static void VID_AppFocusChanged(qboolean windowIsActive) +{ + if (vid_activewindow != windowIsActive) + { + vid_activewindow = windowIsActive; + if (!vid_activewindow) + VID_RestoreSystemGamma(); + } + + if (sound_active != windowIsActive) + { + sound_active = windowIsActive; + if (sound_active) + S_UnblockSound (); + else + S_BlockSound (); + } +} + static void VID_ProcessPendingAsyncEvents (void) { // Collapsed / expanded if (AsyncEvent_Collapsed != vid_hidden) { vid_hidden = !vid_hidden; - vid_activewindow = false; - VID_RestoreSystemGamma(); + VID_AppFocusChanged(!vid_hidden); } // Closed if (AsyncEvent_Quitting) - { Sys_Quit(); - } } static void VID_BuildAGLAttrib(GLint *attrib, qboolean stencil, qboolean fullscreen) @@ -534,6 +555,7 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate vid_usingmouse = false; vid_hidden = false; vid_activewindow = true; + sound_active = true; GL_Init(); SelectWindow(window); @@ -544,25 +566,27 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate static void Handle_KeyMod(UInt32 keymod) { - const struct keymod_to_event_s { int keybit; keynum_t event; } keymod_events [] = + const struct keymod_to_event_s { UInt32 keybit; keynum_t event; } keymod_events [] = { - {cmdKey, K_AUX1}, - {shiftKey, K_SHIFT}, - {alphaLock, K_CAPSLOCK}, - {optionKey, K_ALT}, - {controlKey, K_CTRL}, - {kEventKeyModifierNumLockMask, K_NUMLOCK}, - {kEventKeyModifierFnMask, K_AUX2} + { cmdKey, K_AUX1 }, + { shiftKey, K_SHIFT }, + { alphaLock, K_CAPSLOCK }, + { optionKey, K_ALT }, + { controlKey, K_CTRL }, + { kEventKeyModifierNumLockMask, K_NUMLOCK }, + { kEventKeyModifierFnMask, K_AUX2 } }; static UInt32 prev_keymod = 0; unsigned int i; UInt32 modChanges; modChanges = prev_keymod ^ keymod; + if (modChanges == 0) + return; for (i = 0; i < sizeof(keymod_events) / sizeof(keymod_events[0]); i++) { - int keybit = keymod_events[i].keybit; + UInt32 keybit = keymod_events[i].keybit; if ((modChanges & keybit) != 0) Key_Event(keymod_events[i].event, '\0', (keymod & keybit) != 0); @@ -769,11 +793,10 @@ void Sys_SendKeyEvents(void) switch (eventKind) { case kEventAppActivated : - vid_activewindow = true; + VID_AppFocusChanged(true); break; case kEventAppDeactivated: - vid_activewindow = false; - VID_RestoreSystemGamma(); + VID_AppFocusChanged(false); break; case kEventAppQuit: Sys_Quit();