summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2022-02-15 23:18:06 +0200
committerJaakko Keränen <jaakko.keranen@iki.fi>2022-02-15 23:18:06 +0200
commite455699fca461e7e73d920a9ebfe557c20a67f98 (patch)
tree68252cc5d383ad99456479ee9c0bb91ffa9a5c85
parenta97ab6d5b0c2734476432c18a79533c57298cd6e (diff)
Site-specific settings
The theme palette seed phrase and ANSI warnings can be configured in the new site-specific settings dialog. Added bindings for Page Information and for opening the site-specific settings dialog. IssueID #381
-rw-r--r--po/en.po21
-rw-r--r--res/lang/cs.binbin32862 -> 33216 bytes
-rw-r--r--res/lang/de.binbin31672 -> 32026 bytes
-rw-r--r--res/lang/en.binbin27741 -> 28095 bytes
-rw-r--r--res/lang/eo.binbin26931 -> 27285 bytes
-rw-r--r--res/lang/es.binbin31584 -> 31938 bytes
-rw-r--r--res/lang/es_MX.binbin28811 -> 29165 bytes
-rw-r--r--res/lang/fi.binbin31382 -> 31736 bytes
-rw-r--r--res/lang/fr.binbin32469 -> 32823 bytes
-rw-r--r--res/lang/gl.binbin30745 -> 31099 bytes
-rw-r--r--res/lang/hu.binbin32494 -> 32848 bytes
-rw-r--r--res/lang/ia.binbin30524 -> 30878 bytes
-rw-r--r--res/lang/ie.binbin30481 -> 30835 bytes
-rw-r--r--res/lang/isv.binbin26462 -> 26816 bytes
-rw-r--r--res/lang/nl.binbin29851 -> 30205 bytes
-rw-r--r--res/lang/pl.binbin31097 -> 31451 bytes
-rw-r--r--res/lang/ru.binbin46444 -> 46798 bytes
-rw-r--r--res/lang/sk.binbin26798 -> 27152 bytes
-rw-r--r--res/lang/sr.binbin45740 -> 46094 bytes
-rw-r--r--res/lang/tok.binbin28587 -> 28941 bytes
-rw-r--r--res/lang/tr.binbin30688 -> 31042 bytes
-rw-r--r--res/lang/uk.binbin45821 -> 46175 bytes
-rw-r--r--res/lang/zh_Hans.binbin26706 -> 27060 bytes
-rw-r--r--res/lang/zh_Hant.binbin27104 -> 27458 bytes
-rw-r--r--src/sitespec.c8
-rw-r--r--src/ui/documentwidget.c6
-rw-r--r--src/ui/keys.c2
-rw-r--r--src/ui/util.c95
28 files changed, 123 insertions, 9 deletions
diff --git a/po/en.po b/po/en.po
index 6db26259..22c10e44 100644
--- a/po/en.po
+++ b/po/en.po
@@ -760,6 +760,27 @@ msgstr "Trust"
760msgid "dlg.cert.fingerprint" 760msgid "dlg.cert.fingerprint"
761msgstr "Copy Fingerprint" 761msgstr "Copy Fingerprint"
762 762
763msgid "pageinfo.settings"
764msgstr "Settings"
765
766msgid "heading.sitespec"
767msgstr "Site-Specific Settings"
768
769msgid "sitespec.ansi"
770msgstr "ANSI escape warnings:"
771
772msgid "sitespec.palette"
773msgstr "Theme palette seed:"
774
775msgid "sitespec.accept"
776msgstr "Save Settings"
777
778msgid "keys.pageinfo"
779msgstr "Show page information"
780
781msgid "keys.sitespec"
782msgstr "Show site-specific settings"
783
763#, c-format 784#, c-format
764msgid "dlg.input.prompt" 785msgid "dlg.input.prompt"
765msgstr "Please enter input for %s:" 786msgstr "Please enter input for %s:"
diff --git a/res/lang/cs.bin b/res/lang/cs.bin
index f3f2a060..0cf36a2b 100644
--- a/res/lang/cs.bin
+++ b/res/lang/cs.bin
Binary files differ
diff --git a/res/lang/de.bin b/res/lang/de.bin
index 0f918bfb..ea6e1841 100644
--- a/res/lang/de.bin
+++ b/res/lang/de.bin
Binary files differ
diff --git a/res/lang/en.bin b/res/lang/en.bin
index 727258d1..372cef24 100644
--- a/res/lang/en.bin
+++ b/res/lang/en.bin
Binary files differ
diff --git a/res/lang/eo.bin b/res/lang/eo.bin
index f68ac15d..8a9519b6 100644
--- a/res/lang/eo.bin
+++ b/res/lang/eo.bin
Binary files differ
diff --git a/res/lang/es.bin b/res/lang/es.bin
index 1d09138c..3435a8d8 100644
--- a/res/lang/es.bin
+++ b/res/lang/es.bin
Binary files differ
diff --git a/res/lang/es_MX.bin b/res/lang/es_MX.bin
index d3efe8fe..5c527322 100644
--- a/res/lang/es_MX.bin
+++ b/res/lang/es_MX.bin
Binary files differ
diff --git a/res/lang/fi.bin b/res/lang/fi.bin
index 24e2a905..cdbda504 100644
--- a/res/lang/fi.bin
+++ b/res/lang/fi.bin
Binary files differ
diff --git a/res/lang/fr.bin b/res/lang/fr.bin
index c644fab8..3ab07f12 100644
--- a/res/lang/fr.bin
+++ b/res/lang/fr.bin
Binary files differ
diff --git a/res/lang/gl.bin b/res/lang/gl.bin
index e93d1eb7..5f5d467b 100644
--- a/res/lang/gl.bin
+++ b/res/lang/gl.bin
Binary files differ
diff --git a/res/lang/hu.bin b/res/lang/hu.bin
index 5bfe37eb..17486efa 100644
--- a/res/lang/hu.bin
+++ b/res/lang/hu.bin
Binary files differ
diff --git a/res/lang/ia.bin b/res/lang/ia.bin
index 4b0b9bc3..8cae5947 100644
--- a/res/lang/ia.bin
+++ b/res/lang/ia.bin
Binary files differ
diff --git a/res/lang/ie.bin b/res/lang/ie.bin
index b69fd2a4..bd647d76 100644
--- a/res/lang/ie.bin
+++ b/res/lang/ie.bin
Binary files differ
diff --git a/res/lang/isv.bin b/res/lang/isv.bin
index 0cbd0f67..81d30963 100644
--- a/res/lang/isv.bin
+++ b/res/lang/isv.bin
Binary files differ
diff --git a/res/lang/nl.bin b/res/lang/nl.bin
index 82d13774..e860c109 100644
--- a/res/lang/nl.bin
+++ b/res/lang/nl.bin
Binary files differ
diff --git a/res/lang/pl.bin b/res/lang/pl.bin
index 9d13a9e2..b759b1b7 100644
--- a/res/lang/pl.bin
+++ b/res/lang/pl.bin
Binary files differ
diff --git a/res/lang/ru.bin b/res/lang/ru.bin
index 6a09521d..8463fbfe 100644
--- a/res/lang/ru.bin
+++ b/res/lang/ru.bin
Binary files differ
diff --git a/res/lang/sk.bin b/res/lang/sk.bin
index 9532ca17..a0197c5b 100644
--- a/res/lang/sk.bin
+++ b/res/lang/sk.bin
Binary files differ
diff --git a/res/lang/sr.bin b/res/lang/sr.bin
index 58828fea..dc10b8a0 100644
--- a/res/lang/sr.bin
+++ b/res/lang/sr.bin
Binary files differ
diff --git a/res/lang/tok.bin b/res/lang/tok.bin
index 0c4f6123..977454a8 100644
--- a/res/lang/tok.bin
+++ b/res/lang/tok.bin
Binary files differ
diff --git a/res/lang/tr.bin b/res/lang/tr.bin
index f62d0968..c131d0ea 100644
--- a/res/lang/tr.bin
+++ b/res/lang/tr.bin
Binary files differ
diff --git a/res/lang/uk.bin b/res/lang/uk.bin
index bbc10575..8377c0ba 100644
--- a/res/lang/uk.bin
+++ b/res/lang/uk.bin
Binary files differ
diff --git a/res/lang/zh_Hans.bin b/res/lang/zh_Hans.bin
index 3a34d15d..acaaaa77 100644
--- a/res/lang/zh_Hans.bin
+++ b/res/lang/zh_Hans.bin
Binary files differ
diff --git a/res/lang/zh_Hant.bin b/res/lang/zh_Hant.bin
index f0ac2727..cf674d55 100644
--- a/res/lang/zh_Hant.bin
+++ b/res/lang/zh_Hant.bin
Binary files differ
diff --git a/src/sitespec.c b/src/sitespec.c
index 31094981..21edc0a2 100644
--- a/src/sitespec.c
+++ b/src/sitespec.c
@@ -268,6 +268,12 @@ void setValueString_SiteSpec(const iString *site, enum iSiteSpecKey key, const i
268 set_String(&params->titanIdentity, value); 268 set_String(&params->titanIdentity, value);
269 } 269 }
270 break; 270 break;
271 case paletteSeed_SiteSpecKey:
272 if (!equal_String(&params->paletteSeed, value)) {
273 needSave = iTrue;
274 set_String(&params->paletteSeed, value);
275 }
276 break;
271 default: 277 default:
272 break; 278 break;
273 } 279 }
@@ -339,6 +345,8 @@ const iString *valueString_SiteSpec(const iString *site, enum iSiteSpecKey key)
339 switch (key) { 345 switch (key) {
340 case titanIdentity_SiteSpecKey: 346 case titanIdentity_SiteSpecKey:
341 return &params->titanIdentity; 347 return &params->titanIdentity;
348 case paletteSeed_SiteSpecKey:
349 return &params->paletteSeed;
342 default: 350 default:
343 return collectNew_String(); 351 return collectNew_String();
344 } 352 }
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index 7d9ac154..1f3e0e37 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -4033,6 +4033,12 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
4033 addAction_Widget(dlg, SDLK_SPACE, 0, "message.ok"); 4033 addAction_Widget(dlg, SDLK_SPACE, 0, "message.ok");
4034 return iTrue; 4034 return iTrue;
4035 } 4035 }
4036 else if (equal_Command(cmd, "document.sitespec") && d == document_App()) {
4037 if (!findWidget_App("sitespec.palette")) {
4038 makeSiteSpecificSettings_Widget(d->mod.url);
4039 }
4040 return iTrue;
4041 }
4036 else if (equal_Command(cmd, "server.unexpire") && document_App() == d) { 4042 else if (equal_Command(cmd, "server.unexpire") && document_App() == d) {
4037 const iRangecc host = urlHost_String(d->mod.url); 4043 const iRangecc host = urlHost_String(d->mod.url);
4038 const uint16_t port = urlPort_String(d->mod.url); 4044 const uint16_t port = urlPort_String(d->mod.url);
diff --git a/src/ui/keys.c b/src/ui/keys.c
index 26a286bc..88efa98b 100644
--- a/src/ui/keys.c
+++ b/src/ui/keys.c
@@ -243,6 +243,8 @@ static const struct { int id; iMenuItem bind; int flags; } defaultBindings_[] =
243 { 110,{ "${menu.save.downloads}", SDLK_s, KMOD_PRIMARY, "document.save" }, 0 }, 243 { 110,{ "${menu.save.downloads}", SDLK_s, KMOD_PRIMARY, "document.save" }, 0 },
244 { 120,{ "${keys.upload}", SDLK_u, KMOD_PRIMARY, "document.upload" }, 0 }, 244 { 120,{ "${keys.upload}", SDLK_u, KMOD_PRIMARY, "document.upload" }, 0 },
245 { 121,{ "${keys.upload.edit}", SDLK_e, KMOD_PRIMARY, "document.upload copy:1" }, 0 }, 245 { 121,{ "${keys.upload.edit}", SDLK_e, KMOD_PRIMARY, "document.upload copy:1" }, 0 },
246 { 125,{ "${keys.pageinfo}", SDLK_i, KMOD_PRIMARY, "document.info" }, 0 },
247 { 126,{ "${keys.sitespec}", ',', KMOD_PRIMARY | KMOD_SHIFT, "document.sitespec" }, 0 },
246 { 130,{ "${keys.input.precedingline}", SDLK_v, KMOD_PRIMARY | KMOD_SHIFT, "input.precedingline" }, 0 }, 248 { 130,{ "${keys.input.precedingline}", SDLK_v, KMOD_PRIMARY | KMOD_SHIFT, "input.precedingline" }, 0 },
247 /* The following cannot currently be changed (built-in duplicates). */ 249 /* The following cannot currently be changed (built-in duplicates). */
248#if defined (iPlatformApple) 250#if defined (iPlatformApple)
diff --git a/src/ui/util.c b/src/ui/util.c
index 54715121..5cd8a582 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -35,6 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
35#include "keys.h" 35#include "keys.h"
36#include "labelwidget.h" 36#include "labelwidget.h"
37#include "root.h" 37#include "root.h"
38#include "sitespec.h"
38#include "text.h" 39#include "text.h"
39#include "touch.h" 40#include "touch.h"
40#include "widget.h" 41#include "widget.h"
@@ -3126,7 +3127,7 @@ iWidget *makeBookmarkCreation_Widget(const iString *url, const iString *title, i
3126 3127
3127static iBool handleFeedSettingCommands_(iWidget *dlg, const char *cmd) { 3128static iBool handleFeedSettingCommands_(iWidget *dlg, const char *cmd) {
3128 if (equal_Command(cmd, "cancel")) { 3129 if (equal_Command(cmd, "cancel")) {
3129 setupSheetTransition_Mobile(dlg, iFalse); 3130 setupSheetTransition_Mobile(dlg, 0);
3130 destroy_Widget(dlg); 3131 destroy_Widget(dlg);
3131 return iTrue; 3132 return iTrue;
3132 } 3133 }
@@ -3233,32 +3234,108 @@ iWidget *makeFeedSettings_Widget(uint32_t bookmarkId) {
3233 return dlg; 3234 return dlg;
3234} 3235}
3235 3236
3237/*----------------------------------------------------------------------------------------------*/
3238
3239static void siteSpecificThemeChanged_(const iWidget *dlg) {
3240 iDocumentWidget *doc = document_App();
3241 setThemeSeed_GmDocument((iGmDocument *) document_DocumentWidget(doc),
3242 urlPaletteSeed_String(url_DocumentWidget(doc)),
3243 urlThemeSeed_String(url_DocumentWidget(doc)));
3244 postCommand_App("theme.changed");
3245}
3246
3247static const iString *siteSpecificRoot_(const iWidget *dlg) {
3248 return collect_String(suffix_Command(cstr_String(id_Widget(dlg)), "site"));
3249}
3250
3251static void updateSiteSpecificTheme_(iInputWidget *palSeed, void *context) {
3252 iWidget *dlg = context;
3253 const iString *siteRoot = siteSpecificRoot_(dlg);
3254 setValueString_SiteSpec(siteRoot, paletteSeed_SiteSpecKey, text_InputWidget(palSeed));
3255 siteSpecificThemeChanged_(dlg);
3256 /* Allow seeing the new theme. */
3257 setFlags_Widget(dlg, noFadeBackground_WidgetFlag, iTrue);
3258}
3259
3260static void closeSiteSpecific_(iWidget *dlg) {
3261 setupSheetTransition_Mobile(dlg, 0);
3262 delete_String(userData_Object(dlg)); /* saved original palette seed */
3263 destroy_Widget(dlg);
3264}
3265
3266static iBool siteSpecificSettingsHandler_(iWidget *dlg, const char *cmd) {
3267 if (equal_Command(cmd, "cancel")) {
3268 iInputWidget *palSeed = findChild_Widget(dlg, "sitespec.palette");
3269 setText_InputWidget(palSeed, userData_Object(dlg));
3270 updateSiteSpecificTheme_(palSeed, dlg);
3271 closeSiteSpecific_(dlg);
3272 return iTrue;
3273 }
3274 if (startsWith_CStr(cmd, "input.ended id:sitespec.palette")) {
3275 setFlags_Widget(dlg, noFadeBackground_WidgetFlag, iFalse);
3276 refresh_Widget(dlg);
3277 siteSpecificThemeChanged_(dlg);
3278 return iTrue;
3279 }
3280 if (equal_Command(cmd, "sitespec.accept")) {
3281 const iInputWidget *palSeed = findChild_Widget(dlg, "sitespec.palette");
3282 const iBool warnAnsi = isSelected_Widget(findChild_Widget(dlg, "sitespec.ansi"));
3283 const iString *siteRoot = siteSpecificRoot_(dlg);
3284 int dismissed = value_SiteSpec(siteRoot, dismissWarnings_SiteSpecKey);
3285 iChangeFlags(dismissed, ansiEscapes_GmDocumentWarning, !warnAnsi);
3286 setValue_SiteSpec(siteRoot, dismissWarnings_SiteSpecKey, dismissed);
3287 setValueString_SiteSpec(siteRoot, paletteSeed_SiteSpecKey, text_InputWidget(palSeed));
3288 siteSpecificThemeChanged_(dlg);
3289 /* Note: The active DocumentWidget may actually be different than when opening the dialog. */
3290 closeSiteSpecific_(dlg);
3291 return iTrue;
3292 }
3293 return iFalse;
3294}
3295
3236iWidget *makeSiteSpecificSettings_Widget(const iString *url) { 3296iWidget *makeSiteSpecificSettings_Widget(const iString *url) {
3237 iWidget *dlg; 3297 iWidget *dlg;
3238 const iMenuItem actions[] = { 3298 const iMenuItem actions[] = {
3239 { "${cancel}" }, { "${sitespec.accept}", SDLK_RETURN, KMOD_PRIMARY, "sitespec.accept" } 3299 { "${cancel}" },
3300 { "${sitespec.accept}", SDLK_RETURN, KMOD_PRIMARY, "sitespec.accept" }
3240 }; 3301 };
3241 if (isUsingPanelLayout_Mobile()) { 3302 if (isUsingPanelLayout_Mobile()) {
3242 iAssert(iFalse); 3303 iAssert(iFalse);
3243 } 3304 }
3244 else { 3305 else {
3245 iWidget *headings, *values; 3306 iWidget *headings, *values;
3246 dlg = makeSheet_Widget("sitespec"); 3307 dlg = makeSheet_Widget(format_CStr("sitespec site:%s", cstr_Rangecc(urlRoot_String(url))));
3247 addDialogTitle_(dlg, "${heading.sitespec}", "heading.sitespec"); 3308 addDialogTitle_(dlg, "${heading.sitespec}", "heading.sitespec");
3248 addChild_Widget(dlg, iClob(makeTwoColumns_Widget(&headings, &values))); 3309 addChild_Widget(dlg, iClob(makeTwoColumns_Widget(&headings, &values)));
3310 iInputWidget *palSeed = new_InputWidget(0);
3311 setHint_InputWidget(palSeed, cstr_Block(urlThemeSeed_String(url)));
3312 addPrefsInputWithHeading_(headings, values, "sitespec.palette", iClob(palSeed));
3249 addDialogToggle_(headings, values, "${sitespec.ansi}", "sitespec.ansi"); 3313 addDialogToggle_(headings, values, "${sitespec.ansi}", "sitespec.ansi");
3250 iInputWidget *palInput = new_InputWidget(0); 3314 addChild_Widget(dlg, iClob(makeDialogButtons_Widget(actions, iElemCount(actions))));
3251 addPrefsInputWithHeading_(headings, values, "sitespec.palette", iClob(palInput)); 3315 addChild_Widget(get_Root()->widget, iClob(dlg));
3252 as_Widget(palInput)->rect.size.x = 80 * gap_UI; 3316 as_Widget(palSeed)->rect.size.x = 60 * gap_UI;
3253 addChild_Widget(dlg, iClob(makeDialogButtons_Widget(actions, iElemCount(actions)))); 3317 arrange_Widget(dlg);
3254 } 3318 }
3255 /* Initialize. */ { 3319 /* Initialize. */ {
3256 const iRangecc root = urlRoot_String(url); 3320 const iString *site = collectNewRange_String(urlRoot_String(url));
3257 3321 setToggle_Widget(findChild_Widget(dlg, "sitespec.ansi"),
3322 ~value_SiteSpec(site, dismissWarnings_SiteSpecKey) & ansiEscapes_GmDocumentWarning);
3323 setText_InputWidget(findChild_Widget(dlg, "sitespec.palette"),
3324 valueString_SiteSpec(site, paletteSeed_SiteSpecKey));
3325 /* Keep a copy of the original palette seed for restoring on cancel. */
3326 setUserData_Object(dlg, copy_String(valueString_SiteSpec(site, paletteSeed_SiteSpecKey)));
3327 if (!isUsingPanelLayout_Mobile()) {
3328 setValidator_InputWidget(findChild_Widget(dlg, "sitespec.palette"),
3329 updateSiteSpecificTheme_, dlg);
3330 }
3258 } 3331 }
3332 setCommandHandler_Widget(dlg, siteSpecificSettingsHandler_);
3333 setupSheetTransition_Mobile(dlg, incoming_TransitionFlag);
3259 return dlg; 3334 return dlg;
3260} 3335}
3261 3336
3337/*----------------------------------------------------------------------------------------------*/
3338
3262iWidget *makeIdentityCreation_Widget(void) { 3339iWidget *makeIdentityCreation_Widget(void) {
3263 const iMenuItem actions[] = { { "${dlg.newident.more}", 0, 0, "ident.showmore" }, 3340 const iMenuItem actions[] = { { "${dlg.newident.more}", 0, 0, "ident.showmore" },
3264 { "---" }, 3341 { "---" },