diff options
Diffstat (limited to 'src/app.c')
-rw-r--r-- | src/app.c | 25 |
1 files changed, 10 insertions, 15 deletions
@@ -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 | ||
1263 | static iBool nextEvent_App_(iApp *d, enum iAppEventMode eventMode, SDL_Event *event) { | 1263 | static 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 | ||
1588 | static int resizeWatcher_(void *user, SDL_Event *event) { | 1581 | static 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 | ||
1677 | iBool isRefreshPending_App(void) { | 1671 | iBool 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 | ||
1681 | iBool isFinishedLaunching_App(void) { | 1676 | iBool isFinishedLaunching_App(void) { |