From f9117532955f0d8935971eb1053f13f9ecab7662 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Mon, 29 Mar 2021 13:40:54 +0300 Subject: Preferences: Collapse preformatted blocks on page load IssueID #180 --- src/app.c | 13 ++++++++++--- src/gmdocument.c | 3 +++ src/prefs.c | 1 + src/prefs.h | 4 ++++ src/ui/documentwidget.c | 3 +++ src/ui/listwidget.c | 4 +++- src/ui/util.c | 3 ++- 7 files changed, 26 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/app.c b/src/app.c index d4d5f5a6..ba282440 100644 --- a/src/app.c +++ b/src/app.c @@ -217,20 +217,22 @@ static iString *serializePrefs_App_(const iApp *d) { appendFormat_String(str, "prefs.dialogtab arg:%d\n", d->prefs.dialogTab); appendFormat_String(str, "font.set arg:%d\n", d->prefs.font); appendFormat_String(str, "headingfont.set arg:%d\n", d->prefs.headingFont); - appendFormat_String(str, "prefs.mono.gemini.changed arg:%d\n", d->prefs.monospaceGemini); - appendFormat_String(str, "prefs.mono.gopher.changed arg:%d\n", d->prefs.monospaceGopher); appendFormat_String(str, "zoom.set arg:%d\n", d->prefs.zoomPercent); appendFormat_String(str, "smoothscroll arg:%d\n", d->prefs.smoothScrolling); appendFormat_String(str, "imageloadscroll arg:%d\n", d->prefs.loadImageInsteadOfScrolling); appendFormat_String(str, "cachesize.set arg:%d\n", d->prefs.maxCacheSize); appendFormat_String(str, "decodeurls arg:%d\n", d->prefs.decodeUserVisibleURLs); appendFormat_String(str, "linewidth.set arg:%d\n", d->prefs.lineWidth); + /* TODO: Set up an array of booleans in Prefs and do these in a loop. */ + appendFormat_String(str, "prefs.mono.gemini.changed arg:%d\n", d->prefs.monospaceGemini); + appendFormat_String(str, "prefs.mono.gopher.changed arg:%d\n", d->prefs.monospaceGopher); appendFormat_String(str, "prefs.biglede.changed arg:%d\n", d->prefs.bigFirstParagraph); appendFormat_String(str, "prefs.plaintext.wrap.changed arg:%d\n", d->prefs.plainTextWrap); appendFormat_String(str, "prefs.sideicon.changed arg:%d\n", d->prefs.sideIcon); appendFormat_String(str, "prefs.centershort.changed arg:%d\n", d->prefs.centerShortDocs); - appendFormat_String(str, "quoteicon.set arg:%d\n", d->prefs.quoteIcon ? 1 : 0); + appendFormat_String(str, "prefs.collapsepreonload.changed arg:%d\n", d->prefs.collapsePreOnLoad); appendFormat_String(str, "prefs.hoverlink.changed arg:%d\n", d->prefs.hoverLink); + appendFormat_String(str, "quoteicon.set arg:%d\n", d->prefs.quoteIcon ? 1 : 0); appendFormat_String(str, "theme.set arg:%d auto:1\n", d->prefs.theme); appendFormat_String(str, "accent.set arg:%d\n", d->prefs.accent); appendFormat_String(str, "ostheme arg:%d\n", d->prefs.useSystemTheme); @@ -1715,6 +1717,10 @@ iBool handleCommand_App(const char *cmd) { postCommand_App("theme.changed"); return iTrue; } + else if (equal_Command(cmd, "prefs.collapsepreonload.changed")) { + d->prefs.collapsePreOnLoad = arg_Command(cmd) != 0; + return iTrue; + } else if (equal_Command(cmd, "prefs.hoverlink.changed")) { d->prefs.hoverLink = arg_Command(cmd) != 0; postRefresh_App(); @@ -1944,6 +1950,7 @@ iBool handleCommand_App(const char *cmd) { setToggle_Widget(findChild_Widget(dlg, "prefs.plaintext.wrap"), d->prefs.plainTextWrap); setToggle_Widget(findChild_Widget(dlg, "prefs.sideicon"), d->prefs.sideIcon); setToggle_Widget(findChild_Widget(dlg, "prefs.centershort"), d->prefs.centerShortDocs); + setToggle_Widget(findChild_Widget(dlg, "prefs.collapsepreonload"), d->prefs.collapsePreOnLoad); updateColorThemeButton_(findChild_Widget(dlg, "prefs.doctheme.dark"), d->prefs.docThemeDark); updateColorThemeButton_(findChild_Widget(dlg, "prefs.doctheme.light"), d->prefs.docThemeLight); updateFontButton_(findChild_Widget(dlg, "prefs.font"), d->prefs.font); diff --git a/src/gmdocument.c b/src/gmdocument.c index 7fddc575..313fd40a 100644 --- a/src/gmdocument.c +++ b/src/gmdocument.c @@ -432,6 +432,9 @@ static void doLayout_GmDocument_(iGmDocument *d) { meta.flags = constValue_Array(oldPreMeta, preIndex, iGmPreMeta).flags & folded_GmPreMetaFlag; } + else if (prefs->collapsePreOnLoad) { + meta.flags |= folded_GmPreMetaFlag; + } pushBack_Array(&d->preMeta, &meta); continue; } diff --git a/src/prefs.c b/src/prefs.c index 119dfd56..8a1bda79 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -40,6 +40,7 @@ void init_Prefs(iPrefs *d) { d->hoverLink = iTrue; d->smoothScrolling = iTrue; d->loadImageInsteadOfScrolling = iFalse; + d->collapsePreOnLoad = iFalse; d->decodeUserVisibleURLs = iTrue; d->maxCacheSize = 10; d->font = nunito_TextFont; diff --git a/src/prefs.h b/src/prefs.h index 1bd434d0..232c6fc3 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -32,6 +32,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ iDeclareType(Prefs) +/* TODO: Refactor at least the boolean values into an array for easier manipulation. + Then they can be (de)serialized as a group. Need to use a systematic command naming + convention for notifications. */ struct Impl_Prefs { /* UI state */ int dialogTab; @@ -53,6 +56,7 @@ struct Impl_Prefs { iBool hoverLink; iBool smoothScrolling; iBool loadImageInsteadOfScrolling; + iBool collapsePreOnLoad; iString searchUrl; /* Network */ iString caFile; diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 5d85e275..3b5ddb7c 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c @@ -2506,6 +2506,9 @@ static iBool processEvent_DocumentWidget_(iDocumentWidget *d, const SDL_Event *e setCursor_Window(get_Window(), SDL_SYSTEM_CURSOR_HAND); } else { + if (value_Anim(&d->altTextOpacity) < 0.667f) { + setValue_Anim(&d->altTextOpacity, 0, 0); /* keep it hidden while moving */ + } updateHover_DocumentWidget_(d, mpos); } } diff --git a/src/ui/listwidget.c b/src/ui/listwidget.c index ac64091f..942c46dd 100644 --- a/src/ui/listwidget.c +++ b/src/ui/listwidget.c @@ -199,6 +199,7 @@ int visCount_ListWidget(const iListWidget *d) { (int) size_PtrArray(&d->items)); } +#if 0 static iRanges visRange_ListWidget_(const iListWidget *d) { if (d->itemHeight == 0) { return (iRanges){ 0, 0 }; @@ -207,6 +208,7 @@ static iRanges visRange_ListWidget_(const iListWidget *d) { vis.end = iMin(size_PtrArray(&d->items), vis.start + visCount_ListWidget(d) + 1); return vis; } +#endif size_t itemIndex_ListWidget(const iListWidget *d, iInt2 pos) { const iRect bounds = innerBounds_Widget(constAs_Widget(d)); @@ -339,11 +341,11 @@ static void drawItem_ListWidget_(const iListWidget *d, iPaint *p, size_t index, const iRect itemRect = { pos, init_I2(width_Rect(bounds), d->itemHeight) }; class_ListItem(item)->draw(item, p, itemRect, d); } -#endif static const iListItem *item_ListWidget_(const iListWidget *d, size_t pos) { return constAt_PtrArray(&d->items, pos); } +#endif static void draw_ListWidget_(const iListWidget *d) { const iWidget *w = constAs_Widget(d); diff --git a/src/ui/util.c b/src/ui/util.c index 64b32bad..870d1cad 100644 --- a/src/ui/util.c +++ b/src/ui/util.c @@ -1899,6 +1899,8 @@ iWidget *makePreferences_Widget(void) { addChild_Widget(values, iClob(makeToggle_Widget("prefs.hoverlink"))); addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.centershort}"))); addChild_Widget(values, iClob(makeToggle_Widget("prefs.centershort"))); + addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.collapsepreonload}"))); + addChild_Widget(values, iClob(makeToggle_Widget("prefs.collapsepreonload"))); makeTwoColumnHeading_("${heading.prefs.scrolling}", headings, values); addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.smoothscroll}"))); addChild_Widget(values, iClob(makeToggle_Widget("prefs.smoothscroll"))); @@ -2018,7 +2020,6 @@ iWidget *makePreferences_Widget(void) { appendTwoColumnPage_(tabs, "${heading.prefs.style}", '4', &headings, &values); makeTwoColumnHeading_("${heading.prefs.fonts}", headings, values); /* Fonts. */ { - iWidget *fonts; addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.headingfont}"))); addFontButtons_(values, "headingfont"); addChild_Widget(headings, iClob(makeHeading_Widget("${prefs.font}"))); -- cgit v1.2.3