summaryrefslogtreecommitdiff
path: root/src/app.c
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2021-05-18 07:04:27 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2021-05-18 07:04:27 +0300
commitfacc3abb7faafb323cb87e26ddba8dac01af02e9 (patch)
tree387aa23e03b029f516ecca6880131fd6523e1c3f /src/app.c
parentced855c338b78e05c66d38618373728ef946ebaa (diff)
parent5d517c2f790a38d7fe3c3cc59a1b39fd49e20280 (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.c48
1 files changed, 31 insertions, 17 deletions
diff --git a/src/app.c b/src/app.c
index a50a4553..cc172139 100644
--- a/src/app.c
+++ b/src/app.c
@@ -146,6 +146,7 @@ iDeclareType(Ticker)
146 146
147struct Impl_Ticker { 147struct 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
781static void deinit_App(iApp *d) { 788static 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
1419void addTicker_App(iTickerFunc ticker, iAny *context) { 1426void 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
1432void 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
1425void removeTicker_App(iTickerFunc ticker, iAny *context) { 1438void 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
1430iMimeHooks *mimeHooks_App(void) { 1443iMimeHooks *mimeHooks_App(void) {
@@ -1507,6 +1520,7 @@ static void updateFontButton_(iLabelWidget *button, int font) {
1507 1520
1508static iBool handlePrefsCommands_(iWidget *d, const char *cmd) { 1521static 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 }