diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2022-02-15 23:18:06 +0200 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2022-02-15 23:18:06 +0200 |
commit | e455699fca461e7e73d920a9ebfe557c20a67f98 (patch) | |
tree | 68252cc5d383ad99456479ee9c0bb91ffa9a5c85 | |
parent | a97ab6d5b0c2734476432c18a79533c57298cd6e (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.po | 21 | ||||
-rw-r--r-- | res/lang/cs.bin | bin | 32862 -> 33216 bytes | |||
-rw-r--r-- | res/lang/de.bin | bin | 31672 -> 32026 bytes | |||
-rw-r--r-- | res/lang/en.bin | bin | 27741 -> 28095 bytes | |||
-rw-r--r-- | res/lang/eo.bin | bin | 26931 -> 27285 bytes | |||
-rw-r--r-- | res/lang/es.bin | bin | 31584 -> 31938 bytes | |||
-rw-r--r-- | res/lang/es_MX.bin | bin | 28811 -> 29165 bytes | |||
-rw-r--r-- | res/lang/fi.bin | bin | 31382 -> 31736 bytes | |||
-rw-r--r-- | res/lang/fr.bin | bin | 32469 -> 32823 bytes | |||
-rw-r--r-- | res/lang/gl.bin | bin | 30745 -> 31099 bytes | |||
-rw-r--r-- | res/lang/hu.bin | bin | 32494 -> 32848 bytes | |||
-rw-r--r-- | res/lang/ia.bin | bin | 30524 -> 30878 bytes | |||
-rw-r--r-- | res/lang/ie.bin | bin | 30481 -> 30835 bytes | |||
-rw-r--r-- | res/lang/isv.bin | bin | 26462 -> 26816 bytes | |||
-rw-r--r-- | res/lang/nl.bin | bin | 29851 -> 30205 bytes | |||
-rw-r--r-- | res/lang/pl.bin | bin | 31097 -> 31451 bytes | |||
-rw-r--r-- | res/lang/ru.bin | bin | 46444 -> 46798 bytes | |||
-rw-r--r-- | res/lang/sk.bin | bin | 26798 -> 27152 bytes | |||
-rw-r--r-- | res/lang/sr.bin | bin | 45740 -> 46094 bytes | |||
-rw-r--r-- | res/lang/tok.bin | bin | 28587 -> 28941 bytes | |||
-rw-r--r-- | res/lang/tr.bin | bin | 30688 -> 31042 bytes | |||
-rw-r--r-- | res/lang/uk.bin | bin | 45821 -> 46175 bytes | |||
-rw-r--r-- | res/lang/zh_Hans.bin | bin | 26706 -> 27060 bytes | |||
-rw-r--r-- | res/lang/zh_Hant.bin | bin | 27104 -> 27458 bytes | |||
-rw-r--r-- | src/sitespec.c | 8 | ||||
-rw-r--r-- | src/ui/documentwidget.c | 6 | ||||
-rw-r--r-- | src/ui/keys.c | 2 | ||||
-rw-r--r-- | src/ui/util.c | 95 |
28 files changed, 123 insertions, 9 deletions
@@ -760,6 +760,27 @@ msgstr "Trust" | |||
760 | msgid "dlg.cert.fingerprint" | 760 | msgid "dlg.cert.fingerprint" |
761 | msgstr "Copy Fingerprint" | 761 | msgstr "Copy Fingerprint" |
762 | 762 | ||
763 | msgid "pageinfo.settings" | ||
764 | msgstr "Settings" | ||
765 | |||
766 | msgid "heading.sitespec" | ||
767 | msgstr "Site-Specific Settings" | ||
768 | |||
769 | msgid "sitespec.ansi" | ||
770 | msgstr "ANSI escape warnings:" | ||
771 | |||
772 | msgid "sitespec.palette" | ||
773 | msgstr "Theme palette seed:" | ||
774 | |||
775 | msgid "sitespec.accept" | ||
776 | msgstr "Save Settings" | ||
777 | |||
778 | msgid "keys.pageinfo" | ||
779 | msgstr "Show page information" | ||
780 | |||
781 | msgid "keys.sitespec" | ||
782 | msgstr "Show site-specific settings" | ||
783 | |||
763 | #, c-format | 784 | #, c-format |
764 | msgid "dlg.input.prompt" | 785 | msgid "dlg.input.prompt" |
765 | msgstr "Please enter input for %s:" | 786 | msgstr "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(¶ms->titanIdentity, value); | 268 | set_String(¶ms->titanIdentity, value); |
269 | } | 269 | } |
270 | break; | 270 | break; |
271 | case paletteSeed_SiteSpecKey: | ||
272 | if (!equal_String(¶ms->paletteSeed, value)) { | ||
273 | needSave = iTrue; | ||
274 | set_String(¶ms->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 ¶ms->titanIdentity; | 347 | return ¶ms->titanIdentity; |
348 | case paletteSeed_SiteSpecKey: | ||
349 | return ¶ms->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 | ||
3127 | static iBool handleFeedSettingCommands_(iWidget *dlg, const char *cmd) { | 3128 | static 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 | |||
3239 | static 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 | |||
3247 | static const iString *siteSpecificRoot_(const iWidget *dlg) { | ||
3248 | return collect_String(suffix_Command(cstr_String(id_Widget(dlg)), "site")); | ||
3249 | } | ||
3250 | |||
3251 | static 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 | |||
3260 | static 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 | |||
3266 | static 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 | |||
3236 | iWidget *makeSiteSpecificSettings_Widget(const iString *url) { | 3296 | iWidget *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 | |||
3262 | iWidget *makeIdentityCreation_Widget(void) { | 3339 | iWidget *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 | { "---" }, |