Lagrange [work/v1.12]
Preferences: Toggles for bottom URL/tab bar
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 <jaakko.keranen@iki.fi>[m
[32m+[m[32m/* Copyright 2020-2022 Jaakko Keränen <jaakko.keranen@iki.fi>[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 <the_Foundation/fileinfo.h>[m
#include <assert.h>[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