=> bedc25f4768de383dbf7499f37fe507a12bf2d2b
[1mdiff --git a/po/en.po b/po/en.po[m [1mindex ed71969f..98f0c66f 100644[m [1m--- a/po/en.po[m [1m+++ b/po/en.po[m [36m@@ -1488,6 +1488,12 @@[m [mmsgstr "Mouse speed:"[m msgid "prefs.imageloadscroll"[m msgstr "Load image on scroll:"[m [m [32m+[m[32mmsgid "prefs.bottomnavbar"[m [32m+[m[32mmsgstr "Bottom URL bar:"[m [32m+[m [32m+[m[32mmsgid "prefs.bottomtabbar"[m [32m+[m[32mmsgstr "Bottom tab bar:"[m [32m+[m msgid "prefs.hidetoolbarscroll"[m msgstr "Hide toolbar on scroll:"[m [m [1mdiff --git a/res/lang/cs.bin b/res/lang/cs.bin[m [1mindex 1de4317f..79cb1322 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 17c255e3..ec16891d 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 2bb19132..61ef9a97 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 082e1cc7..db43e1ea 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 2448c4b3..263bcab3 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 d3599643..159ada15 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 5ba3036c..fc880124 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 748df012..8821dc3e 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 5ca367b8..bc17a630 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 e3a66fa7..44396a6a 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 b5729329..d331f43c 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 c77edf4e..736f0bb6 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 cfa8ae56..9eda4753 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 e4bebdcc..41ed0d17 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 f321e65c..65558aa8 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 2608c0c1..9ac988c3 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 5a4660a1..4131bdc9 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 e57ce550..8618c751 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 12002130..a833e10b 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 e004ae0a..67a94f4e 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 8bb8ed73..0cd65722 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 82b409e8..e9cb06d4 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 f922555f..f6a128e4 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 61626ffa..00a8a869 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 fbd92a06..d33f31e1 100644[m [1m--- a/src/app.c[m [1m+++ b/src/app.c[m [36m@@ -1087,6 +1087,7 @@[m [mstatic void init_App_(iApp *d, int argc, char **argv) {[m }[m postCommand_App("~navbar.actions.changed");[m postCommand_App("~toolbar.actions.changed");[m [32m+[m[32m postCommand_App("~root.movable");[m postCommand_App("~window.unfreeze");[m postCommand_App("font.reset");[m d->autoReloadTimer = SDL_AddTimer(60 * 1000, postAutoReloadCommand_App_, NULL);[m [36m@@ -2562,6 +2563,20 @@[m [miBool handleCommand_App(const char *cmd) {[m }[m return iTrue; [m }[m [32m+[m[32m else if (equal_Command(cmd, "prefs.bottomnavbar.changed")) {[m [32m+[m[32m d->prefs.bottomNavBar = arg_Command(cmd) != 0;[m [32m+[m[32m if (!isFrozen) {[m [32m+[m[32m postCommand_App("~root.movable");[m [32m+[m[32m }[m [32m+[m[32m return iTrue;[m [32m+[m[32m }[m [32m+[m[32m else if (equal_Command(cmd, "prefs.bottomtabbar.changed")) {[m [32m+[m[32m d->prefs.bottomTabBar = arg_Command(cmd) != 0;[m [32m+[m[32m if (!isFrozen) {[m [32m+[m[32m postCommand_App("~root.movable");[m [32m+[m[32m }[m [32m+[m[32m return iTrue;[m [32m+[m[32m }[m else if (equal_Command(cmd, "translation.languages")) {[m d->prefs.langFrom = argLabel_Command(cmd, "from");[m d->prefs.langTo = argLabel_Command(cmd, "to");[m [36m@@ -3365,6 +3380,8 @@[m [miBool handleCommand_App(const char *cmd) {[m setToggle_Widget(findChild_Widget(dlg, "prefs.ostheme"), d->prefs.useSystemTheme);[m setToggle_Widget(findChild_Widget(dlg, "prefs.customframe"), d->prefs.customFrame);[m setToggle_Widget(findChild_Widget(dlg, "prefs.animate"), d->prefs.uiAnimations);[m [32m+[m[32m setToggle_Widget(findChild_Widget(dlg, "prefs.bottomnavbar"), d->prefs.bottomNavBar);[m [32m+[m[32m setToggle_Widget(findChild_Widget(dlg, "prefs.bottomtabbar"), d->prefs.bottomTabBar);[m setToggle_Widget(findChild_Widget(dlg, "prefs.blink"), d->prefs.blinkingCursor);[m updatePrefsPinSplitButtons_(dlg, d->prefs.pinSplit);[m updateScrollSpeedButtons_(dlg, mouse_ScrollType, d->prefs.smoothScrollSpeed[mouse_ScrollType]);[m [1mdiff --git a/src/prefs.c b/src/prefs.c[m [1mindex 3ec7448a..f24c7a13 100644[m [1m--- a/src/prefs.c[m [1m+++ b/src/prefs.c[m [36m@@ -1,4 +1,4 @@[m [31m-/* Copyright 2020 Jaakko Keränen[m [32m+[m[32m/* Copyright 2020-2022 Jaakko Keränen [m [m Redistribution and use in source and binary forms, with or without[m modification, are permitted provided that the following conditions are met:[m [36m@@ -21,6 +21,7 @@[m [mANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT[m SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */[m [m #include "prefs.h"[m [32m+[m[32m#include "app.h"[m [m #include [m #include [m [36m@@ -58,8 +59,14 @@[m [mvoid init_Prefs(iPrefs *d) {[m d->sideIcon = iTrue;[m d->hideToolbarOnScroll = iTrue;[m d->blinkingCursor = iTrue;[m [31m- d->bottomNavBar = iTrue;[m [31m- d->bottomTabBar = iTrue;[m [32m+[m[32m if (deviceType_App() == phone_AppDeviceType) {[m [32m+[m[32m d->bottomNavBar = iTrue;[m [32m+[m[32m d->bottomTabBar = iTrue;[m [32m+[m[32m }[m [32m+[m[32m else {[m [32m+[m[32m d->bottomNavBar = iFalse;[m [32m+[m[32m d->bottomTabBar = iFalse;[m[41m [m [32m+[m[32m }[m d->pinSplit = 1;[m d->time24h = iTrue;[m d->returnKey = default_ReturnKeyBehavior;[m [1mdiff --git a/src/ui/root.c b/src/ui/root.c[m [1mindex 46d7f79d..7f96cc9f 100644[m [1m--- a/src/ui/root.c[m [1m+++ b/src/ui/root.c[m [36m@@ -547,6 +547,10 @@[m [mstatic iBool handleRootCommands_(iWidget *root, const char *cmd) {[m root->root->pendingArrange = iFalse;[m return iTrue;[m }[m [32m+[m[32m else if (equal_Command(cmd, "root.movable")) {[m [32m+[m[32m setupMovableElements_Root_(root->root);[m [32m+[m[32m return iFalse; /* all roots must handle this */[m [32m+[m[32m }[m else if (equal_Command(cmd, "theme.changed")) {[m /* The phone toolbar is draw-buffered so it needs refreshing. */[m refresh_Widget(findWidget_App("toolbar"));[m [36m@@ -789,12 +793,8 @@[m [miBool isNarrow_Root(const iRoot *d) {[m return width_Rect(safeRect_Root(d)) / gap_UI < 140;[m }[m [m [31m-static void updateNavBarParent_(iWidget *navBar) {[m [31m- /* The navbar can be */[m [31m-}[m [31m-[m static void updateNavBarSize_(iWidget *navBar) {[m [31m- const iBool isPhone = deviceType_App() == phone_AppDeviceType;[m [32m+[m[32m const iBool isPhone = deviceType_App() == phone_AppDeviceType;[m const iBool isNarrow = !isPhone && isNarrow_Root(navBar->root);[m /* Adjust navbar padding. */ {[m int hPad = isPortraitPhone_App() ? 0 : isPhone || isNarrow ? gap_UI / 2 : (gap_UI * 3 / 2);[m [36m@@ -805,6 +805,9 @@[m [mstatic void updateNavBarSize_(iWidget *navBar) {[m botPad += bottomSafeInset_Mobile();[m hPad += leftSafeInset_Mobile();[m }[m [32m+[m[32m if (!isPhone && prefs_App()->bottomNavBar) {[m [32m+[m[32m topPad = vPad / 2 - vPad / 3;[m [32m+[m[32m }[m setPadding_Widget(navBar, hPad, vPad / 3 + topPad, hPad, botPad);[m }[m /* Button sizing. */[m [1mdiff --git a/src/ui/util.c b/src/ui/util.c[m [1mindex 176d24c0..a6567016 100644[m [1m--- a/src/ui/util.c[m [1m+++ b/src/ui/util.c[m [36m@@ -2528,6 +2528,8 @@[m [miWidget *makePreferences_Widget(void) {[m { "title id:heading.prefs.interface" },[m { "dropdown device:0 id:prefs.returnkey", 0, 0, (const void *) returnKeyBehaviors },[m { "padding device:1" },[m [32m+[m[32m { "toggle id:prefs.bottomnavbar" },[m [32m+[m[32m { "toggle id:prefs.bottomtabbar" },[m { "toggle device:2 id:prefs.hidetoolbarscroll" },[m { "heading device:2 id:heading.prefs.toolbaractions" },[m { "dropdown device:2 id:prefs.toolbaraction1", 0, 0, (const void *) toolbarActionItems[0] },[m [36m@@ -2701,6 +2703,8 @@[m [miWidget *makePreferences_Widget(void) {[m setId_Widget(appendTwoColumnTabPage_Widget(tabs, "${heading.prefs.interface}", '2', &headings, &values),[m "prefs.page.ui");[m addDialogToggle_(headings, values, "${prefs.animate}", "prefs.animate");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.bottomnavbar}", "prefs.bottomnavbar");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.bottomtabbar}", "prefs.bottomtabbar");[m addDialogToggle_(headings, values, "${prefs.blink}", "prefs.blink");[m addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.returnkey}")));[m /* Return key behaviors. */ {[m [36m@@ -2897,6 +2901,9 @@[m [miWidget *makePreferences_Widget(void) {[m addChildFlags_Widget(values, iClob(widths), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag);[m addPrefsInputWithHeading_(headings, values, "prefs.linespacing", iClob(new_InputWidget(5)));[m addDialogToggle_(headings, values, "${prefs.justify}", "prefs.justify");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.plaintext.wrap}", "prefs.plaintext.wrap");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.biglede}", "prefs.biglede");[m [32m+[m[32m addDialogPadding_(headings, values);[m addPrefsInputWithHeading_(headings, values, "prefs.tabwidth", iClob(new_InputWidget(5)));[m addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.quoteicon}")));[m iWidget *quote = new_Widget(); {[m [36m@@ -2904,7 +2911,6 @@[m [miWidget *makePreferences_Widget(void) {[m addRadioButton_(quote, "prefs.quoteicon.0", "${prefs.quoteicon.line}", "quoteicon.set arg:0");[m }[m addChildFlags_Widget(values, iClob(quote), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag);[m [31m- addDialogToggle_(headings, values, "${prefs.biglede}", "prefs.biglede");[m addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.boldlink}")));[m iWidget *boldLink = new_Widget(); {[m /* TODO: Add a utility function for this type of toggles? (also for above) */[m [36m@@ -2926,11 +2932,10 @@[m [miWidget *makePreferences_Widget(void) {[m updateSize_LabelWidget((iLabelWidget *) tog);[m }[m addChildFlags_Widget(values, iClob(boldLink), arrangeHorizontal_WidgetFlag | arrangeSize_WidgetFlag);[m [31m- addDialogToggle_(headings, values, "${prefs.plaintext.wrap}", "prefs.plaintext.wrap");[m [31m- addDialogToggle_(headings, values, "${prefs.collapsepreonload}", "prefs.collapsepreonload");[m addDialogPadding_(headings, values);[m addDialogToggle_(headings, values, "${prefs.sideicon}", "prefs.sideicon");[m addDialogToggle_(headings, values, "${prefs.centershort}", "prefs.centershort");[m [32m+[m[32m addDialogToggle_(headings, values, "${prefs.collapsepreonload}", "prefs.collapsepreonload");[m }[m /* Network. */ {[m setId_Widget(appendTwoColumnTabPage_Widget(tabs, "${heading.prefs.network}", '6', &headings, &values), "prefs.page.network");[m
text/gemini; charset=utf-8
This content has been proxied by September (ba2dc).