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 1820905b..0f9249cc 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) {
@@ -1564,7 +1564,6 @@ static void runTickers_App_(iApp *d) {
1564 /* Tickers may add themselves again, so we'll run off a copy. */ 1564 /* Tickers may add themselves again, so we'll run off a copy. */
1565 iSortedArray *pending = copy_SortedArray(&d->tickers); 1565 iSortedArray *pending = copy_SortedArray(&d->tickers);
1566 clear_SortedArray(&d->tickers); 1566 clear_SortedArray(&d->tickers);
1567 postRefresh_App();
1568 iConstForEach(Array, i, &pending->values) { 1567 iConstForEach(Array, i, &pending->values) {
1569 const iTicker *ticker = i.value; 1568 const iTicker *ticker = i.value;
1570 if (ticker->callback) { 1569 if (ticker->callback) {
@@ -1577,12 +1576,6 @@ static void runTickers_App_(iApp *d) {
1577 if (isEmpty_SortedArray(&d->tickers)) { 1576 if (isEmpty_SortedArray(&d->tickers)) {
1578 d->lastTickerTime = 0; 1577 d->lastTickerTime = 0;
1579 } 1578 }
1580// iForIndices(i, d->window->base.roots) {
1581// iRoot *root = d->window->base.roots[i];
1582// if (root) {
1583// notifyVisualOffsetChange_Root(root);
1584// }
1585// }
1586} 1579}
1587 1580
1588static int resizeWatcher_(void *user, SDL_Event *event) { 1581static int resizeWatcher_(void *user, SDL_Event *event) {
@@ -1649,19 +1642,20 @@ void refresh_App(void) {
1649 } 1642 }
1650 } 1643 }
1651 /* TODO: `pendingRefresh` should be window-specific. */ 1644 /* TODO: `pendingRefresh` should be window-specific. */
1652 if (exchange_Atomic(&d->pendingRefresh, iFalse)) { 1645 if (d->warmupFrames || exchange_Atomic(&d->pendingRefresh, iFalse)) {
1653 /* Draw each window. */ 1646 /* Draw each window. */
1654 iConstForEach(PtrArray, j, &windows) { 1647 iConstForEach(PtrArray, j, &windows) {
1655 iWindow *win = j.ptr; 1648 iWindow *win = j.ptr;
1656 setCurrent_Window(win); 1649 setCurrent_Window(win);
1657 switch (win->type) { 1650 switch (win->type) {
1658 case main_WindowType: 1651 case main_WindowType: {
1659 // iTime draw; 1652// iTime draw;
1660 // initCurrent_Time(&draw); 1653// initCurrent_Time(&draw);
1661 draw_MainWindow(as_MainWindow(win)); 1654 draw_MainWindow(as_MainWindow(win));
1662 // printf("draw: %lld \u03bcs\n", (long long) (elapsedSeconds_Time(&draw) * 1000000)); 1655// printf("draw: %lld \u03bcs\n", (long long) (elapsedSeconds_Time(&draw) * 1000000));
1663 // fflush(stdout); 1656// fflush(stdout);
1664 break; 1657 break;
1658 }
1665 default: 1659 default:
1666 draw_Window(win); 1660 draw_Window(win);
1667 break; 1661 break;
@@ -1675,7 +1669,8 @@ void refresh_App(void) {
1675} 1669}
1676 1670
1677iBool isRefreshPending_App(void) { 1671iBool isRefreshPending_App(void) {
1678 return value_Atomic(&app_.pendingRefresh); 1672 const iApp *d = &app_;
1673 return !isEmpty_SortedArray(&d->tickers) || value_Atomic(&app_.pendingRefresh);
1679} 1674}
1680 1675
1681iBool isFinishedLaunching_App(void) { 1676iBool isFinishedLaunching_App(void) {