summaryrefslogtreecommitdiff
path: root/src/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.c')
-rw-r--r--src/app.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/src/app.c b/src/app.c
index b323f7c6..b6c48062 100644
--- a/src/app.c
+++ b/src/app.c
@@ -1257,7 +1257,7 @@ iLocalDef iBool isWaitingAllowed_App_(iApp *d) {
1257 return iFalse; 1257 return iFalse;
1258 } 1258 }
1259#endif 1259#endif
1260 return !value_Atomic(&d->pendingRefresh) && isEmpty_SortedArray(&d->tickers); 1260 return !isRefreshPending_App();
1261} 1261}
1262 1262
1263static iBool nextEvent_App_(iApp *d, enum iAppEventMode eventMode, SDL_Event *event) { 1263static iBool nextEvent_App_(iApp *d, enum iAppEventMode eventMode, SDL_Event *event) {
@@ -1560,7 +1560,6 @@ static void runTickers_App_(iApp *d) {
1560 /* Tickers may add themselves again, so we'll run off a copy. */ 1560 /* Tickers may add themselves again, so we'll run off a copy. */
1561 iSortedArray *pending = copy_SortedArray(&d->tickers); 1561 iSortedArray *pending = copy_SortedArray(&d->tickers);
1562 clear_SortedArray(&d->tickers); 1562 clear_SortedArray(&d->tickers);
1563 postRefresh_App();
1564 iConstForEach(Array, i, &pending->values) { 1563 iConstForEach(Array, i, &pending->values) {
1565 const iTicker *ticker = i.value; 1564 const iTicker *ticker = i.value;
1566 if (ticker->callback) { 1565 if (ticker->callback) {
@@ -1573,12 +1572,6 @@ static void runTickers_App_(iApp *d) {
1573 if (isEmpty_SortedArray(&d->tickers)) { 1572 if (isEmpty_SortedArray(&d->tickers)) {
1574 d->lastTickerTime = 0; 1573 d->lastTickerTime = 0;
1575 } 1574 }
1576// iForIndices(i, d->window->base.roots) {
1577// iRoot *root = d->window->base.roots[i];
1578// if (root) {
1579// notifyVisualOffsetChange_Root(root);
1580// }
1581// }
1582} 1575}
1583 1576
1584static int resizeWatcher_(void *user, SDL_Event *event) { 1577static int resizeWatcher_(void *user, SDL_Event *event) {
@@ -1645,19 +1638,20 @@ void refresh_App(void) {
1645 } 1638 }
1646 } 1639 }
1647 /* TODO: `pendingRefresh` should be window-specific. */ 1640 /* TODO: `pendingRefresh` should be window-specific. */
1648 if (exchange_Atomic(&d->pendingRefresh, iFalse)) { 1641 if (d->warmupFrames || exchange_Atomic(&d->pendingRefresh, iFalse)) {
1649 /* Draw each window. */ 1642 /* Draw each window. */
1650 iConstForEach(PtrArray, j, &windows) { 1643 iConstForEach(PtrArray, j, &windows) {
1651 iWindow *win = j.ptr; 1644 iWindow *win = j.ptr;
1652 setCurrent_Window(win); 1645 setCurrent_Window(win);
1653 switch (win->type) { 1646 switch (win->type) {
1654 case main_WindowType: 1647 case main_WindowType: {
1655 // iTime draw; 1648// iTime draw;
1656 // initCurrent_Time(&draw); 1649// initCurrent_Time(&draw);
1657 draw_MainWindow(as_MainWindow(win)); 1650 draw_MainWindow(as_MainWindow(win));
1658 // printf("draw: %lld \u03bcs\n", (long long) (elapsedSeconds_Time(&draw) * 1000000)); 1651// printf("draw: %lld \u03bcs\n", (long long) (elapsedSeconds_Time(&draw) * 1000000));
1659 // fflush(stdout); 1652// fflush(stdout);
1660 break; 1653 break;
1654 }
1661 default: 1655 default:
1662 draw_Window(win); 1656 draw_Window(win);
1663 break; 1657 break;
@@ -1671,7 +1665,8 @@ void refresh_App(void) {
1671} 1665}
1672 1666
1673iBool isRefreshPending_App(void) { 1667iBool isRefreshPending_App(void) {
1674 return value_Atomic(&app_.pendingRefresh); 1668 const iApp *d = &app_;
1669 return !isEmpty_SortedArray(&d->tickers) || value_Atomic(&app_.pendingRefresh);
1675} 1670}
1676 1671
1677iBool isFinishedLaunching_App(void) { 1672iBool isFinishedLaunching_App(void) {