diff options
Diffstat (limited to 'src/app.c')
-rw-r--r-- | src/app.c | 21 |
1 files changed, 19 insertions, 2 deletions
@@ -125,6 +125,7 @@ struct Impl_App { | |||
125 | iTime lastDropTime; /* for detecting drops of multiple items */ | 125 | iTime lastDropTime; /* for detecting drops of multiple items */ |
126 | int autoReloadTimer; | 126 | int autoReloadTimer; |
127 | iPeriodic periodic; | 127 | iPeriodic periodic; |
128 | int warmupFrames; /* forced refresh just after resuming from background */ | ||
128 | /* Preferences: */ | 129 | /* Preferences: */ |
129 | iBool commandEcho; /* --echo */ | 130 | iBool commandEcho; /* --echo */ |
130 | iBool forceSoftwareRender; /* --sw */ | 131 | iBool forceSoftwareRender; /* --sw */ |
@@ -587,6 +588,7 @@ static void init_App_(iApp *d, int argc, char **argv) { | |||
587 | const iBool isFirstRun = | 588 | const iBool isFirstRun = |
588 | !fileExistsCStr_FileInfo(cleanedPath_CStr(concatPath_CStr(dataDir_App_(), "prefs.cfg"))); | 589 | !fileExistsCStr_FileInfo(cleanedPath_CStr(concatPath_CStr(dataDir_App_(), "prefs.cfg"))); |
589 | d->isFinishedLaunching = iFalse; | 590 | d->isFinishedLaunching = iFalse; |
591 | d->warmupFrames = 0; | ||
590 | d->launchCommands = new_StringList(); | 592 | d->launchCommands = new_StringList(); |
591 | iZap(d->lastDropTime); | 593 | iZap(d->lastDropTime); |
592 | init_SortedArray(&d->tickers, sizeof(iTicker), cmp_Ticker_); | 594 | init_SortedArray(&d->tickers, sizeof(iTicker), cmp_Ticker_); |
@@ -835,6 +837,9 @@ void trimCache_App(void) { | |||
835 | } | 837 | } |
836 | 838 | ||
837 | iLocalDef iBool isWaitingAllowed_App_(iApp *d) { | 839 | iLocalDef iBool isWaitingAllowed_App_(iApp *d) { |
840 | if (d->warmupFrames > 0) { | ||
841 | return iFalse; | ||
842 | } | ||
838 | #if defined (LAGRANGE_IDLE_SLEEP) | 843 | #if defined (LAGRANGE_IDLE_SLEEP) |
839 | if (d->isIdling) { | 844 | if (d->isIdling) { |
840 | return iFalse; | 845 | return iFalse; |
@@ -874,6 +879,12 @@ void processEvents_App(enum iAppEventMode eventMode) { | |||
874 | clearCache_App_(); | 879 | clearCache_App_(); |
875 | break; | 880 | break; |
876 | case SDL_APP_DIDENTERFOREGROUND: | 881 | case SDL_APP_DIDENTERFOREGROUND: |
882 | gotEvents = iTrue; | ||
883 | d->warmupFrames = 5; | ||
884 | #if defined (LAGRANGE_IDLE_SLEEP) | ||
885 | d->isIdling = iFalse; | ||
886 | d->lastEventTime = SDL_GetTicks(); | ||
887 | #endif | ||
877 | postRefresh_App(); | 888 | postRefresh_App(); |
878 | break; | 889 | break; |
879 | case SDL_APP_WILLENTERBACKGROUND: | 890 | case SDL_APP_WILLENTERBACKGROUND: |
@@ -1039,7 +1050,7 @@ static int run_App_(iApp *d) { | |||
1039 | d->isRunning = iTrue; | 1050 | d->isRunning = iTrue; |
1040 | SDL_EventState(SDL_DROPFILE, SDL_ENABLE); /* open files via drag'n'drop */ | 1051 | SDL_EventState(SDL_DROPFILE, SDL_ENABLE); /* open files via drag'n'drop */ |
1041 | #if defined (iPlatformDesktop) | 1052 | #if defined (iPlatformDesktop) |
1042 | SDL_AddEventWatch(resizeWatcher_, d); | 1053 | SDL_AddEventWatch(resizeWatcher_, d); /* redraw window during resizing */ |
1043 | #endif | 1054 | #endif |
1044 | while (d->isRunning) { | 1055 | while (d->isRunning) { |
1045 | processEvents_App(waitForNewEvents_AppEventMode); | 1056 | processEvents_App(waitForNewEvents_AppEventMode); |
@@ -1054,11 +1065,17 @@ static int run_App_(iApp *d) { | |||
1054 | void refresh_App(void) { | 1065 | void refresh_App(void) { |
1055 | iApp *d = &app_; | 1066 | iApp *d = &app_; |
1056 | #if defined (LAGRANGE_IDLE_SLEEP) | 1067 | #if defined (LAGRANGE_IDLE_SLEEP) |
1057 | if (d->isIdling) return; | 1068 | if (d->warmupFrames == 0 && d->isIdling) { |
1069 | return; | ||
1070 | } | ||
1058 | #endif | 1071 | #endif |
1059 | set_Atomic(&d->pendingRefresh, iFalse); | 1072 | set_Atomic(&d->pendingRefresh, iFalse); |
1060 | destroyPending_Widget(); | 1073 | destroyPending_Widget(); |
1061 | draw_Window(d->window); | 1074 | draw_Window(d->window); |
1075 | if (d->warmupFrames > 0) { | ||
1076 | printf("warmup frame: %d\n", d->warmupFrames); | ||
1077 | d->warmupFrames--; | ||
1078 | } | ||
1062 | } | 1079 | } |
1063 | 1080 | ||
1064 | iBool isRefreshPending_App(void) { | 1081 | iBool isRefreshPending_App(void) { |