=> 9beb506b6d66f8264702cb60e7927dee3567ba94
[1mdiff --git a/po/en.po b/po/en.po[m [1mindex d1e7027c..d4584609 100644[m [1m--- a/po/en.po[m [1m+++ b/po/en.po[m [36m@@ -1533,6 +1533,9 @@[m [mmsgstr "Language:"[m msgid "prefs.time.24h"[m msgstr "24-Hour Time"[m [m [32m+[m[32mmsgid "prefs.retaintabs"[m [32m+[m[32mmsgstr "Restore tabs at launch:"[m [32m+[m msgid "prefs.uiscale"[m msgstr "UI scale factor:"[m [m [1mdiff --git a/res/lang/cs.bin b/res/lang/cs.bin[m [1mindex 4115ed6b..e58da8a7 100644[m Binary files a/res/lang/cs.bin and b/res/lang/cs.bin differ [1mdiff --git a/res/lang/de.bin b/res/lang/de.bin[m [1mindex 094f7ba3..553d974e 100644[m Binary files a/res/lang/de.bin and b/res/lang/de.bin differ [1mdiff --git a/res/lang/en.bin b/res/lang/en.bin[m [1mindex a4c77530..c3c1f998 100644[m Binary files a/res/lang/en.bin and b/res/lang/en.bin differ [1mdiff --git a/res/lang/eo.bin b/res/lang/eo.bin[m [1mindex 9e587563..dd2a90eb 100644[m Binary files a/res/lang/eo.bin and b/res/lang/eo.bin differ [1mdiff --git a/res/lang/es.bin b/res/lang/es.bin[m [1mindex fd46818a..36b100c9 100644[m Binary files a/res/lang/es.bin and b/res/lang/es.bin differ [1mdiff --git a/res/lang/es_MX.bin b/res/lang/es_MX.bin[m [1mindex e680ca2d..80c9189f 100644[m Binary files a/res/lang/es_MX.bin and b/res/lang/es_MX.bin differ [1mdiff --git a/res/lang/fi.bin b/res/lang/fi.bin[m [1mindex e67bcdc1..f447ed50 100644[m Binary files a/res/lang/fi.bin and b/res/lang/fi.bin differ [1mdiff --git a/res/lang/fr.bin b/res/lang/fr.bin[m [1mindex 1caad665..5ecfa866 100644[m Binary files a/res/lang/fr.bin and b/res/lang/fr.bin differ [1mdiff --git a/res/lang/gl.bin b/res/lang/gl.bin[m [1mindex 7d7c0ca2..f2eb2fc9 100644[m Binary files a/res/lang/gl.bin and b/res/lang/gl.bin differ [1mdiff --git a/res/lang/hu.bin b/res/lang/hu.bin[m [1mindex 4efe5260..f2dfbef4 100644[m Binary files a/res/lang/hu.bin and b/res/lang/hu.bin differ [1mdiff --git a/res/lang/ia.bin b/res/lang/ia.bin[m [1mindex 8dc6b799..148966d9 100644[m Binary files a/res/lang/ia.bin and b/res/lang/ia.bin differ [1mdiff --git a/res/lang/ie.bin b/res/lang/ie.bin[m [1mindex 6c1df718..df285088 100644[m Binary files a/res/lang/ie.bin and b/res/lang/ie.bin differ [1mdiff --git a/res/lang/isv.bin b/res/lang/isv.bin[m [1mindex 4f39ad7c..0b1d7763 100644[m Binary files a/res/lang/isv.bin and b/res/lang/isv.bin differ [1mdiff --git a/res/lang/it.bin b/res/lang/it.bin[m [1mindex bf36c0b0..ecc878a6 100644[m Binary files a/res/lang/it.bin and b/res/lang/it.bin differ [1mdiff --git a/res/lang/nl.bin b/res/lang/nl.bin[m [1mindex 0f037d28..679205f5 100644[m Binary files a/res/lang/nl.bin and b/res/lang/nl.bin differ [1mdiff --git a/res/lang/pl.bin b/res/lang/pl.bin[m [1mindex 9d650947..e3275484 100644[m Binary files a/res/lang/pl.bin and b/res/lang/pl.bin differ [1mdiff --git a/res/lang/ru.bin b/res/lang/ru.bin[m [1mindex 3c33f708..cf15a2d7 100644[m Binary files a/res/lang/ru.bin and b/res/lang/ru.bin differ [1mdiff --git a/res/lang/sk.bin b/res/lang/sk.bin[m [1mindex 7b93bce9..5e67eea6 100644[m Binary files a/res/lang/sk.bin and b/res/lang/sk.bin differ [1mdiff --git a/res/lang/sr.bin b/res/lang/sr.bin[m [1mindex 7631078f..022a2981 100644[m Binary files a/res/lang/sr.bin and b/res/lang/sr.bin differ [1mdiff --git a/res/lang/tok.bin b/res/lang/tok.bin[m [1mindex 9f6c802c..70b23119 100644[m Binary files a/res/lang/tok.bin and b/res/lang/tok.bin differ [1mdiff --git a/res/lang/tr.bin b/res/lang/tr.bin[m [1mindex 045217cd..d6772c46 100644[m Binary files a/res/lang/tr.bin and b/res/lang/tr.bin differ [1mdiff --git a/res/lang/uk.bin b/res/lang/uk.bin[m [1mindex 6f3d4174..1594a006 100644[m Binary files a/res/lang/uk.bin and b/res/lang/uk.bin differ [1mdiff --git a/res/lang/zh_Hans.bin b/res/lang/zh_Hans.bin[m [1mindex fddc78bf..5de58aaf 100644[m Binary files a/res/lang/zh_Hans.bin and b/res/lang/zh_Hans.bin differ [1mdiff --git a/res/lang/zh_Hant.bin b/res/lang/zh_Hant.bin[m [1mindex 7d8839e7..00f42204 100644[m Binary files a/res/lang/zh_Hant.bin and b/res/lang/zh_Hant.bin differ [1mdiff --git a/src/app.c b/src/app.c[m [1mindex 0e2ac0b5..22208938 100644[m [1m--- a/src/app.c[m [1m+++ b/src/app.c[m [36m@@ -279,25 +279,26 @@[m [mstatic iString *serializePrefs_App_(const iApp *d) {[m const char * id;[m const iBool *value;[m } boolPrefs[] = {[m [31m- { "prefs.time.24h", &d->prefs.time24h },[m { "prefs.animate", &d->prefs.uiAnimations },[m [31m- { "prefs.font.smooth", &d->prefs.fontSmoothing },[m [31m- { "prefs.mono.gemini", &d->prefs.monospaceGemini },[m [31m- { "prefs.mono.gopher", &d->prefs.monospaceGopher },[m [31m- { "prefs.boldlink.visited", &d->prefs.boldLinkVisited },[m [32m+[m[32m { "prefs.archive.openindex", &d->prefs.openArchiveIndexPages },[m [32m+[m[32m { "prefs.biglede", &d->prefs.bigFirstParagraph },[m [32m+[m[32m { "prefs.blink", &d->prefs.blinkingCursor },[m { "prefs.boldlink.dark", &d->prefs.boldLinkDark },[m { "prefs.boldlink.light", &d->prefs.boldLinkLight },[m [31m- { "prefs.biglede", &d->prefs.bigFirstParagraph },[m [31m- { "prefs.plaintext.wrap", &d->prefs.plainTextWrap },[m [31m- { "prefs.sideicon", &d->prefs.sideIcon },[m [32m+[m[32m { "prefs.boldlink.visited", &d->prefs.boldLinkVisited },[m [32m+[m[32m { "prefs.bookmarks.addbottom", &d->prefs.addBookmarksToBottom },[m { "prefs.centershort", &d->prefs.centerShortDocs },[m { "prefs.collapsepreonload", &d->prefs.collapsePreOnLoad },[m [31m- { "prefs.hoverlink", &d->prefs.hoverLink },[m [31m- { "prefs.bookmarks.addbottom", &d->prefs.addBookmarksToBottom },[m { "prefs.dataurl.openimages", &d->prefs.openDataUrlImagesOnLoad },[m [31m- { "prefs.archive.openindex", &d->prefs.openArchiveIndexPages },[m [32m+[m[32m { "prefs.font.smooth", &d->prefs.fontSmoothing },[m { "prefs.font.warnmissing", &d->prefs.warnAboutMissingGlyphs },[m [31m- { "prefs.blink", &d->prefs.blinkingCursor },[m [32m+[m[32m { "prefs.hoverlink", &d->prefs.hoverLink },[m [32m+[m[32m { "prefs.mono.gemini", &d->prefs.monospaceGemini },[m [32m+[m[32m { "prefs.mono.gopher", &d->prefs.monospaceGopher },[m [32m+[m[32m { "prefs.plaintext.wrap", &d->prefs.plainTextWrap },[m [32m+[m[32m { "prefs.retaintabs", &d->prefs.retainTabs },[m [32m+[m[32m { "prefs.sideicon", &d->prefs.sideIcon },[m [32m+[m[32m { "prefs.time.24h", &d->prefs.time24h },[m };[m iForIndices(i, boolPrefs) {[m appendFormat_String(str, "%s.changed arg:%d\n", boolPrefs[i].id, *boolPrefs[i].value);[m [36m@@ -430,9 +431,10 @@[m [mstatic void loadPrefs_App_(iApp *d) {[m insert_StringSet(d->prefs.disabledFontPacks,[m collect_String(suffix_Command(cmd, "id")));[m }[m [31m- else if (equal_Command(cmd, "font.set")) {[m [31m- /* Handle this immediately so the first initialization of the fonts already[m [31m- has the right ones. */[m [32m+[m[32m else if (equal_Command(cmd, "font.set") ||[m [32m+[m[32m equal_Command(cmd, "prefs.retaintabs.changed")) {[m [32m+[m[32m /* Fonts are set immediately so the first initialization already has[m[41m [m [32m+[m[32m the right ones. */[m handleCommand_App(cmd);[m }[m #if defined (iPlatformAndroidMobile)[m [36m@@ -641,17 +643,19 @@[m [mstatic iBool loadState_App_(iApp *d) {[m rootIndex = 0;[m }[m setCurrent_Root(win->base.roots[rootIndex]);[m [31m- iDocumentWidget *doc;[m [31m- if (isFirstTab[rootIndex]) {[m [31m- isFirstTab[rootIndex] = iFalse;[m [31m- /* There is one pre-created tab in each root. */[m [31m- doc = document_Root(get_Root());[m [31m- }[m [31m- else {[m [31m- doc = newTab_App(NULL, iFalse /* no switching */);[m [31m- }[m [31m- if (flags & current_DocumentStateFlag) {[m [31m- value_Array(currentTabs, numWins - 1, iCurrentTabs).currentTab[rootIndex] = doc;[m [32m+[m[32m iDocumentWidget *doc = NULL;[m [32m+[m[32m if (d->prefs.retainTabs) {[m [32m+[m[32m if (isFirstTab[rootIndex]) {[m [32m+[m[32m isFirstTab[rootIndex] = iFalse;[m [32m+[m[32m /* There is one pre-created tab in each root. */[m [32m+[m[32m doc = document_Root(get_Root());[m [32m+[m[32m }[m [32m+[m[32m else {[m [32m+[m[32m doc = newTab_App(NULL, iFalse /* no switching */);[m [32m+[m[32m }[m [32m+[m[32m if (flags & current_DocumentStateFlag) {[m [32m+[m[32m value_Array(currentTabs, numWins - 1, iCurrentTabs).currentTab[rootIndex] = doc;[m [32m+[m[32m }[m }[m deserializeState_DocumentWidget(doc, stream_File(f));[m doc = NULL;[m [36m@@ -1067,6 +1071,17 @@[m [mstatic void init_App_(iApp *d, int argc, char **argv) {[m if (!loadState_App_(d)) {[m postCommand_Root(NULL, "open url:about:help");[m }[m [32m+[m[32m else if (!d->prefs.retainTabs) {[m [32m+[m[32m /* All roots will just show home. */[m [32m+[m[32m iForEach(PtrArray, w, &d->mainWindows) {[m [32m+[m[32m const iWindow *win = w.ptr;[m [32m+[m[32m iForIndices(ri, win->roots) {[m [32m+[m[32m if (win->roots[ri]) {[m [32m+[m[32m postCommand_Root(win->roots[ri], "navigate.home");[m [32m+[m[32m }[m [32m+[m[32m }[m [32m+[m[32m }[m [32m+[m[32m }[m postCommand_App("~navbar.actions.changed");[m postCommand_App("~toolbar.actions.changed");[m postCommand_App("~window.unfreeze");[m [36m@@ -2597,6 +2612,10 @@[m [miBool handleCommand_App(const char *cmd) {[m postCommandf_App("window.fullscreen.changed arg:%d", !wasFull);[m return iTrue;[m }[m [32m+[m[32m else if (equal_Command(cmd, "prefs.retaintabs.changed")) {[m [32m+[m[32m d->prefs.retainTabs = arg_Command(cmd);[m [32m+[m[32m return iTrue;[m [32m+[m[32m }[m else if (equal_Command(cmd, "font.reset")) {[m resetFonts_App();[m return iTrue;[m [36m@@ -3323,6 +3342,7 @@[m [miBool handleCommand_App(const char *cmd) {[m /* TODO: Use a common table in Prefs to do this more conviently.[m Also see `serializePrefs_App_()`. */[m setToggle_Widget(findChild_Widget(dlg, "prefs.hoverlink"), d->prefs.hoverLink);[m [32m+[m[32m setToggle_Widget(findChild_Widget(dlg, "prefs.retaintabs"), d->prefs.retainTabs);[m setToggle_Widget(findChild_Widget(dlg, "prefs.smoothscroll"), d->prefs.smoothScrolling);[m setToggle_Widget(findChild_Widget(dlg, "prefs.imageloadscroll"), d->prefs.loadImageInsteadOfScrolling);[m setToggle_Widget(findChild_Widget(dlg, "prefs.hidetoolbarscroll"), d->prefs.hideToolbarOnScroll);[m [1mdiff --git a/src/prefs.c b/src/prefs.c[m [1mindex fa05eb70..495940b4 100644[m [1m--- a/src/prefs.c[m [1m+++ b/src/prefs.c[m [36m@@ -61,7 +61,8 @@[m [mvoid init_Prefs(iPrefs *d) {[m d->pinSplit = 1;[m d->time24h = iTrue;[m d->returnKey = default_ReturnKeyBehavior;[m [31m- d->hoverLink = iFalse;[m [32m+[m[32m d->retainTabs = iTrue;[m [32m+[m[32m d->hoverLink = iTrue;[m d->smoothScrolling = iTrue;[m d->smoothScrollSpeed[keyboard_ScrollType] = 13;[m d->smoothScrollSpeed[mouse_ScrollType] = 13;[m [1mdiff --git a/src/prefs.h b/src/prefs.h[m [1mindex fc4f00ef..67616747 100644[m [1m--- a/src/prefs.h[m [1m+++ b/src/prefs.h[m [36m@@ -72,6 +72,7 @@[m [menum iPrefsBool {[m time24h_PrefsBool,[m [m /* Behavior */[m [32m+[m[32m retainTabs_PrefsBool,[m hoverLink_PrefsBool,[m smoothScrolling_PrefsBool,[m loadImageInsteadOfScrolling_PrefsBool,[m [36m@@ -126,6 +127,7 @@[m [mstruct Impl_Prefs {[m iBool time24h;[m [m /* Behavior */[m [32m+[m[32m iBool retainTabs;[m iBool hoverLink;[m iBool smoothScrolling;[m iBool loadImageInsteadOfScrolling;[m [1mdiff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c[m [1mindex 93b321f2..15b8f753 100644[m [1m--- a/src/ui/documentwidget.c[m [1m+++ b/src/ui/documentwidget.c[m [36m@@ -5884,9 +5884,17 @@[m [mvoid serializeState_DocumentWidget(const iDocumentWidget *d, iStream *outs) {[m }[m [m void deserializeState_DocumentWidget(iDocumentWidget *d, iStream *ins) {[m [31m- deserialize_PersistentDocumentState(&d->mod, ins);[m [31m- parseUser_DocumentWidget_(d);[m [31m- updateFromHistory_DocumentWidget_(d);[m [32m+[m[32m if (d) {[m [32m+[m[32m deserialize_PersistentDocumentState(&d->mod, ins);[m [32m+[m[32m parseUser_DocumentWidget_(d);[m [32m+[m[32m updateFromHistory_DocumentWidget_(d);[m [32m+[m[32m }[m [32m+[m[32m else {[m [32m+[m[32m /* Read and throw away the data. */[m [32m+[m[32m iPersistentDocumentState *dummy = new_PersistentDocumentState();[m [32m+[m[32m deserialize_PersistentDocumentState(dummy, ins);[m [32m+[m[32m delete_PersistentDocumentState(dummy);[m [32m+[m[32m }[m }[m [m void setUrlFlags_DocumentWidget(iDocumentWidget *d, const iString *url, int setUrlFlags) {[m [1mdiff --git a/src/ui/util.c b/src/ui/util.c[m [1mindex 7cbd0757..42064843 100644[m [1m--- a/src/ui/util.c[m [1m+++ b/src/ui/util.c[m [36m@@ -2650,9 +2650,7 @@[m [miWidget *makePreferences_Widget(void) {[m setUrlContent_InputWidget(searchUrl, iTrue);[m addDialogPadding_(headings, values);[m addDialogToggle_(headings, values, "${prefs.hoverlink}", "prefs.hoverlink");[m [31m- addDialogToggle_(headings, values, "${prefs.dataurl.openimages}", "prefs.dataurl.openimages");[m [31m- addDialogToggle_(headings, values, "${prefs.archive.openindex}", "prefs.archive.openindex");[m [31m- addDialogToggle_(headings, values, "${prefs.bookmarks.addbottom}", "prefs.bookmarks.addbottom");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.retaintabs}", "prefs.retaintabs");[m if (deviceType_App() != phone_AppDeviceType) {[m addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.pinsplit}")));[m iWidget *pinSplit = new_Widget();[m [36m@@ -2663,6 +2661,9 @@[m [miWidget *makePreferences_Widget(void) {[m }[m addChildFlags_Widget(values, iClob(pinSplit), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag);[m }[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.bookmarks.addbottom}", "prefs.bookmarks.addbottom");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.archive.openindex}", "prefs.archive.openindex");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.dataurl.openimages}", "prefs.dataurl.openimages");[m addDialogPadding_(headings, values);[m /* UI languages. */ {[m iArray *uiLangs = collectNew_Array(sizeof(iMenuItem));[m
text/gemini; charset=utf-8
This content has been proxied by September (ba2dc).