diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-05-18 07:04:27 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2021-05-18 07:04:27 +0300 |
commit | facc3abb7faafb323cb87e26ddba8dac01af02e9 (patch) | |
tree | 387aa23e03b029f516ecca6880131fd6523e1c3f /src/app.c | |
parent | ced855c338b78e05c66d38618373728ef946ebaa (diff) | |
parent | 5d517c2f790a38d7fe3c3cc59a1b39fd49e20280 (diff) |
Merge branch 'dev' into work/typesetter
# Conflicts:
# src/ui/documentwidget.c
# src/ui/inputwidget.c
Diffstat (limited to 'src/app.c')
-rw-r--r-- | src/app.c | 48 |
1 files changed, 31 insertions, 17 deletions
@@ -146,6 +146,7 @@ iDeclareType(Ticker) | |||
146 | 146 | ||
147 | struct Impl_Ticker { | 147 | struct Impl_Ticker { |
148 | iAny *context; | 148 | iAny *context; |
149 | iRoot *root; | ||
149 | void (*callback)(iAny *); | 150 | void (*callback)(iAny *); |
150 | }; | 151 | }; |
151 | 152 | ||
@@ -411,15 +412,17 @@ static iBool loadState_App_(iApp *d) { | |||
411 | const uint8_t rootIndex = bits & 0xff; | 412 | const uint8_t rootIndex = bits & 0xff; |
412 | const uint8_t flags = bits >> 8; | 413 | const uint8_t flags = bits >> 8; |
413 | iRoot *root = d->window->roots[rootIndex]; | 414 | iRoot *root = d->window->roots[rootIndex]; |
414 | if (root && deviceType_App() != phone_AppDeviceType) { | 415 | if (root) { |
415 | iSidebarWidget *sidebar = findChild_Widget(root->widget, "sidebar"); | 416 | iSidebarWidget *sidebar = findChild_Widget(root->widget, "sidebar"); |
416 | iSidebarWidget *sidebar2 = findChild_Widget(root->widget, "sidebar2"); | 417 | iSidebarWidget *sidebar2 = findChild_Widget(root->widget, "sidebar2"); |
417 | setWidth_SidebarWidget(sidebar, widths[0]); | ||
418 | setWidth_SidebarWidget(sidebar2, widths[1]); | ||
419 | postCommandf_Root(root, "sidebar.mode arg:%u", modes & 0xf); | 418 | postCommandf_Root(root, "sidebar.mode arg:%u", modes & 0xf); |
420 | postCommandf_Root(root, "sidebar2.mode arg:%u", modes >> 4); | 419 | postCommandf_Root(root, "sidebar2.mode arg:%u", modes >> 4); |
421 | if (flags & 1) postCommand_Root(root, "sidebar.toggle"); | 420 | if (deviceType_App() != phone_AppDeviceType) { |
422 | if (flags & 2) postCommand_Root(root, "sidebar2.toggle"); | 421 | setWidth_SidebarWidget(sidebar, widths[0]); |
422 | setWidth_SidebarWidget(sidebar2, widths[1]); | ||
423 | if (flags & 1) postCommand_Root(root, "sidebar.toggle noanim:1"); | ||
424 | if (flags & 2) postCommand_Root(root, "sidebar2.toggle noanim:1"); | ||
425 | } | ||
423 | } | 426 | } |
424 | } | 427 | } |
425 | else if (!memcmp(magic, magicTabDocument_App_, 4)) { | 428 | else if (!memcmp(magic, magicTabDocument_App_, 4)) { |
@@ -776,6 +779,10 @@ static void init_App_(iApp *d, int argc, char **argv) { | |||
776 | iRelease(openCmds); | 779 | iRelease(openCmds); |
777 | } | 780 | } |
778 | fetchRemote_Bookmarks(d->bookmarks); | 781 | fetchRemote_Bookmarks(d->bookmarks); |
782 | if (deviceType_App() != desktop_AppDeviceType) { | ||
783 | /* HACK: Force a resize so widgets update their state. */ | ||
784 | resize_Window(d->window, -1, -1); | ||
785 | } | ||
779 | } | 786 | } |
780 | 787 | ||
781 | static void deinit_App(iApp *d) { | 788 | static void deinit_App(iApp *d) { |
@@ -1061,7 +1068,14 @@ void processEvents_App(enum iAppEventMode eventMode) { | |||
1061 | } | 1068 | } |
1062 | continue; | 1069 | continue; |
1063 | } | 1070 | } |
1064 | else if (ev.type == SDL_USEREVENT && ev.user.code == arrange_UserEventCode) { | 1071 | d->lastEventTime = SDL_GetTicks(); |
1072 | if (d->isIdling) { | ||
1073 | // printf("[App] ...woke up\n"); | ||
1074 | // fflush(stdout); | ||
1075 | } | ||
1076 | d->isIdling = iFalse; | ||
1077 | #endif | ||
1078 | if (ev.type == SDL_USEREVENT && ev.user.code == arrange_UserEventCode) { | ||
1065 | printf("[App] rearrange\n"); | 1079 | printf("[App] rearrange\n"); |
1066 | resize_Window(d->window, -1, -1); | 1080 | resize_Window(d->window, -1, -1); |
1067 | iForIndices(i, d->window->roots) { | 1081 | iForIndices(i, d->window->roots) { |
@@ -1078,13 +1092,6 @@ void processEvents_App(enum iAppEventMode eventMode) { | |||
1078 | // postRefresh_App(); | 1092 | // postRefresh_App(); |
1079 | continue; | 1093 | continue; |
1080 | } | 1094 | } |
1081 | d->lastEventTime = SDL_GetTicks(); | ||
1082 | if (d->isIdling) { | ||
1083 | // printf("[App] ...woke up\n"); | ||
1084 | // fflush(stdout); | ||
1085 | } | ||
1086 | d->isIdling = iFalse; | ||
1087 | #endif | ||
1088 | gotEvents = iTrue; | 1095 | gotEvents = iTrue; |
1089 | /* Keyboard modifier mapping. */ | 1096 | /* Keyboard modifier mapping. */ |
1090 | if (ev.type == SDL_KEYDOWN || ev.type == SDL_KEYUP) { | 1097 | if (ev.type == SDL_KEYDOWN || ev.type == SDL_KEYUP) { |
@@ -1187,7 +1194,7 @@ static void runTickers_App_(iApp *d) { | |||
1187 | iConstForEach(Array, i, &pending->values) { | 1194 | iConstForEach(Array, i, &pending->values) { |
1188 | const iTicker *ticker = i.value; | 1195 | const iTicker *ticker = i.value; |
1189 | if (ticker->callback) { | 1196 | if (ticker->callback) { |
1190 | setCurrent_Root(findRoot_Window(d->window, ticker->context)); /* root might be NULL */ | 1197 | setCurrent_Root(ticker->root); /* root might be NULL */ |
1191 | ticker->callback(ticker->context); | 1198 | ticker->callback(ticker->context); |
1192 | } | 1199 | } |
1193 | } | 1200 | } |
@@ -1418,13 +1425,19 @@ iAny *findWidget_App(const char *id) { | |||
1418 | 1425 | ||
1419 | void addTicker_App(iTickerFunc ticker, iAny *context) { | 1426 | void addTicker_App(iTickerFunc ticker, iAny *context) { |
1420 | iApp *d = &app_; | 1427 | iApp *d = &app_; |
1421 | insert_SortedArray(&d->tickers, &(iTicker){ context, ticker }); | 1428 | insert_SortedArray(&d->tickers, &(iTicker){ context, get_Root(), ticker }); |
1429 | postRefresh_App(); | ||
1430 | } | ||
1431 | |||
1432 | void addTickerRoot_App(iTickerFunc ticker, iRoot *root, iAny *context) { | ||
1433 | iApp *d = &app_; | ||
1434 | insert_SortedArray(&d->tickers, &(iTicker){ context, root, ticker }); | ||
1422 | postRefresh_App(); | 1435 | postRefresh_App(); |
1423 | } | 1436 | } |
1424 | 1437 | ||
1425 | void removeTicker_App(iTickerFunc ticker, iAny *context) { | 1438 | void removeTicker_App(iTickerFunc ticker, iAny *context) { |
1426 | iApp *d = &app_; | 1439 | iApp *d = &app_; |
1427 | remove_SortedArray(&d->tickers, &(iTicker){ context, ticker }); | 1440 | remove_SortedArray(&d->tickers, &(iTicker){ context, NULL, ticker }); |
1428 | } | 1441 | } |
1429 | 1442 | ||
1430 | iMimeHooks *mimeHooks_App(void) { | 1443 | iMimeHooks *mimeHooks_App(void) { |
@@ -1507,6 +1520,7 @@ static void updateFontButton_(iLabelWidget *button, int font) { | |||
1507 | 1520 | ||
1508 | static iBool handlePrefsCommands_(iWidget *d, const char *cmd) { | 1521 | static iBool handlePrefsCommands_(iWidget *d, const char *cmd) { |
1509 | if (equal_Command(cmd, "prefs.dismiss") || equal_Command(cmd, "preferences")) { | 1522 | if (equal_Command(cmd, "prefs.dismiss") || equal_Command(cmd, "preferences")) { |
1523 | setupSheetTransition_Mobile(d, iFalse); | ||
1510 | setUiScale_Window(get_Window(), | 1524 | setUiScale_Window(get_Window(), |
1511 | toFloat_String(text_InputWidget(findChild_Widget(d, "prefs.uiscale")))); | 1525 | toFloat_String(text_InputWidget(findChild_Widget(d, "prefs.uiscale")))); |
1512 | #if defined (LAGRANGE_ENABLE_DOWNLOAD_EDIT) | 1526 | #if defined (LAGRANGE_ENABLE_DOWNLOAD_EDIT) |
@@ -2381,7 +2395,7 @@ iBool handleCommand_App(const char *cmd) { | |||
2381 | iCertImportWidget *imp = new_CertImportWidget(); | 2395 | iCertImportWidget *imp = new_CertImportWidget(); |
2382 | setPageContent_CertImportWidget(imp, sourceContent_DocumentWidget(document_App())); | 2396 | setPageContent_CertImportWidget(imp, sourceContent_DocumentWidget(document_App())); |
2383 | addChild_Widget(get_Root()->widget, iClob(imp)); | 2397 | addChild_Widget(get_Root()->widget, iClob(imp)); |
2384 | finalizeSheet_Widget(as_Widget(imp)); | 2398 | finalizeSheet_Mobile(as_Widget(imp)); |
2385 | postRefresh_App(); | 2399 | postRefresh_App(); |
2386 | return iTrue; | 2400 | return iTrue; |
2387 | } | 2401 | } |