From 0593bbdf2286e88222316bfd0b5f6b348c60ea73 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Thu, 20 Jan 2022 15:15:08 +0200 Subject: Android: External downloads; Back button handling; bumped version --- res/about/android-version.gmi | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'res/about') diff --git a/res/about/android-version.gmi b/res/about/android-version.gmi index fc7b444b..c36d5be4 100644 --- a/res/about/android-version.gmi +++ b/res/about/android-version.gmi @@ -6,6 +6,11 @@ ``` # Release notes +## 1.10 (Alpha 4) +* Save downloads to the external storage so they're accessible from a file manager. +* Handle Gemini, Gopher and Finger URIs opened from other apps. +* Back button dismisses UI panels/dialogs when appropriate instead of navigating back. + ## 1.10 (Alpha 3) * Added Android-specific release notes. * Added Settings > UI > Toolbar Actions: customize the two leftmost phone toolbar buttons. -- cgit v1.2.3 From 66ed488b7d3804cd366be2eaf5c759adf9736141 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 21 Jan 2022 09:20:24 +0200 Subject: iOS: Bumped version, updated release notes --- CMakeLists.txt | 4 ++-- res/about/ios-version.gmi | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'res/about') diff --git a/CMakeLists.txt b/CMakeLists.txt index 0a654d7b..f2be2460 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,8 +25,8 @@ project (Lagrange set (COPYRIGHT_YEAR 2022) if (IOS) set (PROJECT_VERSION 1.10) - set (IOS_BUNDLE_VERSION 9) - set (IOS_BUILD_DATE "2022-01-01") + set (IOS_BUNDLE_VERSION 10) + set (IOS_BUILD_DATE "2022-01-21") endif () if (ANDROID) set (PROJECT_VERSION 1.10) diff --git a/res/about/ios-version.gmi b/res/about/ios-version.gmi index f3122dbe..81d1fea0 100644 --- a/res/about/ios-version.gmi +++ b/res/about/ios-version.gmi @@ -6,6 +6,10 @@ ``` # Release notes +## 1.10 (10) +* Fixed a hang when tapping "New Folder" while editing bookmarks. +* Bug fixes, improvements, and updated UI translations from the desktop version (v1.10.1). + ## 1.10 (9) * Added "Share" actions for downloaded files (via "Download Linked File") and selected text on page. * Added "Edit Page with Titan": opens the Upload dialog with the page contents prefilled (previous contents are lost!). -- cgit v1.2.3 From ba16812ec46022dc8a868445f75c943659dbf637 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Mon, 24 Jan 2022 12:52:14 +0200 Subject: Updated release notes and Smol Emoji --- res/about/version.gmi | 6 ++++++ res/fonts/SmolEmoji-Regular.ttf | Bin 67168 -> 67168 bytes 2 files changed, 6 insertions(+) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index ea420916..a6a860f2 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -6,6 +6,12 @@ ``` # Release notes +## 1.10.2 +* Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as expected. +* macOS: Workaround for a crash when launching. Prevent event processing from being triggered while the app window is becoming visible for the first time. +* Fixed a build issue on Haiku OS. +* Updated Smol Emoji: added the rest of Unicode 8 Emoji glyphs. + ## 1.10.1 * Fixed bottom actions of the Feeds sidebar getting hidden when all entries are read. This prevented switching between Unread/All filter modes. * Fixed potential crash when downloading a large file (e.g., a fontpack). diff --git a/res/fonts/SmolEmoji-Regular.ttf b/res/fonts/SmolEmoji-Regular.ttf index a9694f3a..08c5ca2d 100644 Binary files a/res/fonts/SmolEmoji-Regular.ttf and b/res/fonts/SmolEmoji-Regular.ttf differ -- cgit v1.2.3 From 8f6d0c7b1bc14b0b850679bacfbe5ecc2f629e20 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Mon, 24 Jan 2022 13:57:30 +0200 Subject: Gopher: Set item type to 1 when navigating to parent As suggested in: gemini://ruario.flounder.online/gemlog/2022-01-19_Some_Gopher_improvements_for_Lagrange.gmi --- res/about/version.gmi | 3 ++- src/ui/documentwidget.c | 14 +++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index a6a860f2..4d67bfe6 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -7,7 +7,8 @@ # Release notes ## 1.10.2 -* Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as expected. +* Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. +* Gopher: Fixed navigating to parent. Set item type to 1 to show a gophermap and not the plain source. * macOS: Workaround for a crash when launching. Prevent event processing from being triggered while the app window is becoming visible for the first time. * Fixed a build issue on Haiku OS. * Updated Smol Emoji: added the rest of Unicode 8 Emoji glyphs. diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 93604225..4332ae8f 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c @@ -4309,9 +4309,17 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) if (parts.path.end[-1] == '/') break; parts.path.end--; } - postCommandf_Root(w->root, - "open url:%s", - cstr_Rangecc((iRangecc){ constBegin_String(d->mod.url), parts.path.end })); + iString *parentUrl = collectNewRange_String((iRangecc){ constBegin_String(d->mod.url), + parts.path.end }); + if (equalCase_Rangecc(parts.scheme, "gopher")) { + /* Always go to a gophermap. */ + iZap(parts); + init_Url(&parts, parentUrl); + if (parts.path.start && size_Range(&parts.path) >= 2) { + ((char *) parts.path.start)[1] = '1'; + } + } + postCommandf_Root(w->root, "open url:%s", cstr_String(parentUrl)); } return iTrue; } -- cgit v1.2.3 From e475df42593303d21584dbde9997f73812795684 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Mon, 24 Jan 2022 14:42:55 +0200 Subject: iOS: Bumped version number; updated release notes --- CMakeLists.txt | 4 ++-- res/about/ios-version.gmi | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'res/about') diff --git a/CMakeLists.txt b/CMakeLists.txt index 9327ec75..aabece81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,8 +25,8 @@ project (Lagrange set (COPYRIGHT_YEAR 2022) if (IOS) set (PROJECT_VERSION 1.10) - set (IOS_BUNDLE_VERSION 10) - set (IOS_BUILD_DATE "2022-01-21") + set (IOS_BUNDLE_VERSION 11) + set (IOS_BUILD_DATE "2022-01-24") endif () if (ANDROID) set (PROJECT_VERSION 1.10) diff --git a/res/about/ios-version.gmi b/res/about/ios-version.gmi index 81d1fea0..8cc3854f 100644 --- a/res/about/ios-version.gmi +++ b/res/about/ios-version.gmi @@ -6,6 +6,11 @@ ``` # Release notes +## 1.10 (11) +* Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. +* Gopher: Fixed navigating to parent. Set item type to 1 to show a gophermap and not the plain source. +* Updated Smol Emoji: added the rest of Unicode 8 Emoji glyphs. + ## 1.10 (10) * Fixed a hang when tapping "New Folder" while editing bookmarks. * Bug fixes, improvements, and updated UI translations from the desktop version (v1.10.1). -- cgit v1.2.3 From 22bcddc9a24381a1393cf732f6f8e1c31a84742f Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Mon, 24 Jan 2022 15:01:26 +0200 Subject: Android: Bumped version number; updated release notes --- CMakeLists.txt | 4 ++-- res/about/android-version.gmi | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'res/about') diff --git a/CMakeLists.txt b/CMakeLists.txt index aabece81..7364bc2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,8 +30,8 @@ if (IOS) endif () if (ANDROID) set (PROJECT_VERSION 1.10) - set (ANDROID_BUILD_VERSION a4) # remember to update Gradle, AndroidManifest.xml - set (ANDROID_BUILD_DATE "2022-01-20") + set (ANDROID_BUILD_VERSION a5) # remember to update Gradle, AndroidManifest.xml + set (ANDROID_BUILD_DATE "2022-01-24") endif () # Defaults that depend on environment. diff --git a/res/about/android-version.gmi b/res/about/android-version.gmi index c36d5be4..ea1475c7 100644 --- a/res/about/android-version.gmi +++ b/res/about/android-version.gmi @@ -6,6 +6,11 @@ ``` # Release notes +## 1.10 (Alpha 5) +* Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. +* Gopher: Fixed navigating to parent. Set item type to 1 to show a gophermap and not the plain source. +* Updated Smol Emoji: added the rest of Unicode 8 Emoji glyphs. + ## 1.10 (Alpha 4) * Save downloads to the external storage so they're accessible from a file manager. * Handle Gemini, Gopher and Finger URIs opened from other apps. -- cgit v1.2.3 From 15f6f4cc48fee5c1e4a503df35818dd45d4f1d4f Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Thu, 27 Jan 2022 19:30:26 +0200 Subject: Updated release notes --- res/about/version.gmi | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 4d67bfe6..e84d07e4 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -6,6 +6,12 @@ ``` # Release notes +## 1.10.3 +* Added a man page. +* "/index.gmi" is considered equal to "/" when navigating to parent directory. +* Fixed crash when a media player is active and a new download is started. +* Fixed a possible crash when saving state of subscribed feeds. + ## 1.10.2 * Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. * Gopher: Fixed navigating to parent. Set item type to 1 to show a gophermap and not the plain source. -- cgit v1.2.3 From 7061fd08e823781a1ba9e56867bc81894b956754 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 28 Jan 2022 05:40:34 +0200 Subject: Updated release notes --- res/about/version.gmi | 1 + 1 file changed, 1 insertion(+) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index e84d07e4..b58a4f1a 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -11,6 +11,7 @@ * "/index.gmi" is considered equal to "/" when navigating to parent directory. * Fixed crash when a media player is active and a new download is started. * Fixed a possible crash when saving state of subscribed feeds. +* Fixed the right-hand sidebar handling the U and Shift+U key events if it was showing the Feeds tab, even though the sidebar was hidden. ## 1.10.2 * Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. -- cgit v1.2.3 From f135a8c9e7a135294a35fb40cee05ddfb3048aa6 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 28 Jan 2022 14:57:21 +0200 Subject: Updated release notes --- res/about/ios-version.gmi | 6 ++++++ res/about/version.gmi | 1 + 2 files changed, 7 insertions(+) (limited to 'res/about') diff --git a/res/about/ios-version.gmi b/res/about/ios-version.gmi index 8cc3854f..2eedaa4e 100644 --- a/res/about/ios-version.gmi +++ b/res/about/ios-version.gmi @@ -6,6 +6,12 @@ ``` # Release notes +## 1.10 (12) +* Tapping the status bar area scrolls the page to the top. +* "/index.gmi" is considered equal to "/" when navigating to parent directory. +* Fixed crash when a media player is active and a new download is started. +* Fixed crash when a line contains nothing but an ANSI escape sequence. + ## 1.10 (11) * Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. * Gopher: Fixed navigating to parent. Set item type to 1 to show a gophermap and not the plain source. diff --git a/res/about/version.gmi b/res/about/version.gmi index b58a4f1a..a0cbe637 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -10,6 +10,7 @@ * Added a man page. * "/index.gmi" is considered equal to "/" when navigating to parent directory. * Fixed crash when a media player is active and a new download is started. +* Fixed crash when a line contains nothing but an ANSI escape sequence. * Fixed a possible crash when saving state of subscribed feeds. * Fixed the right-hand sidebar handling the U and Shift+U key events if it was showing the Feeds tab, even though the sidebar was hidden. -- cgit v1.2.3 From d9950d5b5bd00f3a1a32d7915cfa57b2a818c689 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 28 Jan 2022 14:59:28 +0200 Subject: iOS: Updated release notes --- res/about/ios-version.gmi | 1 + 1 file changed, 1 insertion(+) (limited to 'res/about') diff --git a/res/about/ios-version.gmi b/res/about/ios-version.gmi index 2eedaa4e..55f80d02 100644 --- a/res/about/ios-version.gmi +++ b/res/about/ios-version.gmi @@ -11,6 +11,7 @@ * "/index.gmi" is considered equal to "/" when navigating to parent directory. * Fixed crash when a media player is active and a new download is started. * Fixed crash when a line contains nothing but an ANSI escape sequence. +* Fixed height of navbar buttons on iPad. ## 1.10 (11) * Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. -- cgit v1.2.3 From 07804493ac17ff430302c7940f44b7525c0620e8 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sat, 29 Jan 2022 18:00:01 +0200 Subject: Hierarchical navigation with Gopher and Titan With Gopher, ensure that the item type changes to 1, and with Titan, change to normal Gemini. --- res/about/version.gmi | 2 ++ src/gmutil.c | 21 +++++++++++++++++++++ src/gmutil.h | 2 ++ src/gopher.c | 10 ++++++++++ src/gopher.h | 2 ++ src/ui/documentwidget.c | 28 ++++++++++++++++++++-------- 6 files changed, 57 insertions(+), 8 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index a0cbe637..df532ab3 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -9,6 +9,8 @@ ## 1.10.3 * Added a man page. * "/index.gmi" is considered equal to "/" when navigating to parent directory. +* Gopher: Fixed navigating to root, e.g., when clicking on the page top banner. Set item type to 1 to show a gophermap and not the plain source. +* Titan: When navigating to parent/root, switch URL scheme to "gemini". This action occurs on a Titan response page, so initiating a new upload with the parent/root URL is probably not appropriate. * Fixed crash when a media player is active and a new download is started. * Fixed crash when a line contains nothing but an ANSI escape sequence. * Fixed a possible crash when saving state of subscribed feeds. diff --git a/src/gmutil.c b/src/gmutil.c index 98e4d4d6..b984950e 100644 --- a/src/gmutil.c +++ b/src/gmutil.c @@ -131,6 +131,16 @@ static iRangecc prevPathSeg_(const char *end, const char *start) { return seg; } +void stripUrlPort_String(iString *d) { + iUrl parts; + init_Url(&parts, d); + if (!isEmpty_Range(&parts.port)) { + /* Always preceded by a colon. */ + remove_Block(&d->chars, parts.port.start - 1 - constBegin_String(d), + size_Range(&parts.port) + 1); + } +} + void stripDefaultUrlPort_String(iString *d) { iUrl parts; init_Url(&parts, d); @@ -681,6 +691,17 @@ const iString *withSpacesEncoded_String(const iString *d) { return d; } +const iString *withScheme_String(const iString *d, const char *scheme) { + iUrl parts; + init_Url(&parts, d); + if (!equalCase_Rangecc(parts.scheme, scheme)) { + iString *repl = collectNewCStr_String(scheme); + appendRange_String(repl, (iRangecc){ parts.scheme.end, constEnd_String(d) }); + return repl; + } + return d; +} + const iString *canonicalUrl_String(const iString *d) { /* The "canonical" form, used for internal storage and comparisons, is: - all non-reserved characters decoded (i.e., it's an IRI) diff --git a/src/gmutil.h b/src/gmutil.h index 15bb7b2e..1594afc4 100644 --- a/src/gmutil.h +++ b/src/gmutil.h @@ -127,6 +127,7 @@ iBool isKnownScheme_Rangecc (iRangecc scheme); /* any URI scheme */ iBool isKnownUrlScheme_Rangecc(iRangecc scheme); /* URL schemes only */ void punyEncodeDomain_Rangecc(iRangecc domain, iString *encoded_out); void punyEncodeUrlHost_String(iString *absoluteUrl); +void stripUrlPort_String (iString *); void stripDefaultUrlPort_String(iString *); const iString * urlFragmentStripped_String(const iString *); const iString * urlQueryStripped_String (const iString *); @@ -138,6 +139,7 @@ const char * makeFileUrl_CStr (const char *localFilePath); iString * localFilePathFromUrl_String(const iString *); void urlEncodeSpaces_String (iString *); const iString * withSpacesEncoded_String(const iString *); +const iString * withScheme_String (const iString *, const char *scheme); /* replace URI scheme */ const iString * canonicalUrl_String (const iString *); const char * mediaType_Path (const iString *path); diff --git a/src/gopher.c b/src/gopher.c index 008a7743..0e34fe6a 100644 --- a/src/gopher.c +++ b/src/gopher.c @@ -299,3 +299,13 @@ iBool processResponse_Gopher(iGopher *d, const iBlock *data) { } return changed; } + +void setUrlItemType_Gopher(iString *url, char itemType) { + iUrl parts; + init_Url(&parts, url); + if (equalCase_Rangecc(parts.scheme, "gopher")) { + if (parts.path.start && size_Range(&parts.path) >= 2) { + ((char *) parts.path.start)[1] = itemType; + } + } +} diff --git a/src/gopher.h b/src/gopher.h index 3ad7e374..3cad0c21 100644 --- a/src/gopher.h +++ b/src/gopher.h @@ -44,3 +44,5 @@ iDeclareTypeConstruction(Gopher) void open_Gopher (iGopher *, const iString *url); iBool processResponse_Gopher (iGopher *, const iBlock *data); void cancel_Gopher (iGopher *); + +void setUrlItemType_Gopher (iString *url, char itemType); diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c index 2e15cdce..86513368 100644 --- a/src/ui/documentwidget.c +++ b/src/ui/documentwidget.c @@ -36,6 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "gmdocument.h" #include "gmrequest.h" #include "gmutil.h" +#include "gopher.h" #include "history.h" #include "indicatorwidget.h" #include "inputwidget.h" @@ -4315,20 +4316,31 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd) } iString *parentUrl = collectNewRange_String((iRangecc){ constBegin_String(d->mod.url), parts.path.end }); - if (equalCase_Rangecc(parts.scheme, "gopher")) { - /* Always go to a gophermap. */ - iZap(parts); - init_Url(&parts, parentUrl); - if (parts.path.start && size_Range(&parts.path) >= 2) { - ((char *) parts.path.start)[1] = '1'; - } + /* Always go to a gophermap. */ + setUrlItemType_Gopher(parentUrl, '1'); + /* Hierarchical navigation doesn't make sense with Titan. */ + if (startsWith_String(parentUrl, "titan://")) { + /* We have no way of knowing if the corresponding URL is valid for Gemini, + but let's try anyway. */ + set_String(parentUrl, withScheme_String(parentUrl, "gemini")); + stripUrlPort_String(parentUrl); } postCommandf_Root(w->root, "open url:%s", cstr_String(parentUrl)); } return iTrue; } else if (equal_Command(cmd, "navigate.root") && document_App() == d) { - postCommandf_Root(w->root, "open url:%s/", cstr_Rangecc(urlRoot_String(d->mod.url))); + iString *rootUrl = collectNewRange_String(urlRoot_String(d->mod.url)); + /* Always go to a gophermap. */ + setUrlItemType_Gopher(rootUrl, '1'); + /* Hierarchical navigation doesn't make sense with Titan. */ + if (startsWith_String(rootUrl, "titan://")) { + /* We have no way of knowing if the corresponding URL is valid for Gemini, + but let's try anyway. */ + set_String(rootUrl, withScheme_String(rootUrl, "gemini")); + stripUrlPort_String(rootUrl); + } + postCommandf_Root(w->root, "open url:%s/", cstr_String(rootUrl)); return iTrue; } else if (equalWidget_Command(cmd, w, "scroll.moved")) { -- cgit v1.2.3 From e9cca232c85400f4963ab221afe05c686594cda7 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sat, 29 Jan 2022 18:57:52 +0200 Subject: Don't have duplicate New Tab buttons There tab buttons don't need a New Tab button if the navbar has it. --- res/about/version.gmi | 1 + src/app.c | 3 ++- src/ui/root.c | 17 ++++++++++++++++- src/ui/root.h | 2 ++ 4 files changed, 21 insertions(+), 2 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index df532ab3..5dad2c58 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -8,6 +8,7 @@ ## 1.10.3 * Added a man page. +* Hide the [+] on the row of tab buttons if the navbar has a New Tab button. * "/index.gmi" is considered equal to "/" when navigating to parent directory. * Gopher: Fixed navigating to root, e.g., when clicking on the page top banner. Set item type to 1 to show a gophermap and not the plain source. * Titan: When navigating to parent/root, switch URL scheme to "gemini". This action occurs on a Titan response page, so initiating a new upload with the parent/root URL is probably not appropriate. diff --git a/src/app.c b/src/app.c index a137dc23..9f35d727 100644 --- a/src/app.c +++ b/src/app.c @@ -2086,7 +2086,6 @@ iDocumentWidget *document_Command(const char *cmd) { } iDocumentWidget *newTab_App(const iDocumentWidget *duplicateOf, iBool switchToNew) { - //iApp *d = &app_; iWidget *tabs = findWidget_Root("doctabs"); setFlags_Widget(tabs, hidden_WidgetFlag, iFalse); iWidget *newTabButton = findChild_Widget(tabs, "newtab"); @@ -2102,6 +2101,7 @@ iDocumentWidget *newTab_App(const iDocumentWidget *duplicateOf, iBool switchToNe iRelease(doc); /* now owned by the tabs */ addTabCloseButton_Widget(tabs, as_Widget(doc), "tabs.close"); addChild_Widget(findChild_Widget(tabs, "tabs.buttons"), iClob(newTabButton)); + showOrHideNewTabButton_Root(tabs->root); if (switchToNew) { postCommandf_App("tabs.switch page:%p", doc); } @@ -2852,6 +2852,7 @@ iBool handleCommand_App(const char *cmd) { return iTrue; } iDocumentWidget *doc = document_Command(cmd); + iAssert(doc); iDocumentWidget *origin = doc; if (hasLabel_Command(cmd, "origin")) { iDocumentWidget *cmdOrig = findWidget_App(cstr_Command(cmd, "origin")); diff --git a/src/ui/root.c b/src/ui/root.c index 776a9a35..6e187313 100644 --- a/src/ui/root.c +++ b/src/ui/root.c @@ -703,6 +703,20 @@ void updateToolbarColors_Root(iRoot *d) { #endif } +void showOrHideNewTabButton_Root(iRoot *d) { + iWidget *tabs = findChild_Widget(d->widget, "doctabs"); + iWidget *newTabButton = findChild_Widget(tabs, "newtab"); + iBool hide = iFalse; + iForIndices(i, prefs_App()->navbarActions) { + if (prefs_App()->navbarActions[i] == newTab_ToolbarAction) { + hide = iTrue; + break; + } + } + setFlags_Widget(newTabButton, hidden_WidgetFlag, hide); + arrange_Widget(findChild_Widget(tabs, "tabs.buttons")); +} + void notifyVisualOffsetChange_Root(iRoot *d) { if (d && (d->didAnimateVisualOffsets || d->didChangeArrangement)) { iNotifyAudience(d, visualOffsetsChanged, RootVisualOffsetsChanged); @@ -848,6 +862,7 @@ static void updateNavBarActions_(iWidget *navBar) { } iEndCollect(); } + showOrHideNewTabButton_Root(navBar->root); } static iBool handleNavBarCommands_(iWidget *navBar, const char *cmd) { @@ -1526,7 +1541,7 @@ void createUserInterface_Root(iRoot *d) { } setId_Widget( addChildFlags_Widget(buttons, iClob(newIcon_LabelWidget(add_Icon, 0, 0, "tabs.new")), - moveToParentRightEdge_WidgetFlag), + moveToParentRightEdge_WidgetFlag | collapse_WidgetFlag), "newtab"); } /* Sidebars. */ { diff --git a/src/ui/root.h b/src/ui/root.h index 7e831be3..a81ebdf7 100644 --- a/src/ui/root.h +++ b/src/ui/root.h @@ -43,6 +43,8 @@ void updatePadding_Root (iRoot *); /* TODO: is part of m void dismissPortraitPhoneSidebars_Root (iRoot *); void showToolbar_Root (iRoot *, iBool show); void updateToolbarColors_Root (iRoot *); +void showOrHideNewTabButton_Root (iRoot *); + void notifyVisualOffsetChange_Root (iRoot *); iInt2 size_Root (const iRoot *); -- cgit v1.2.3 From a2fe997be37611fe1cb263b3962c55564a5dd2f0 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sun, 30 Jan 2022 13:20:43 +0200 Subject: Text: Break words at backslashes --- res/about/version.gmi | 1 + src/ui/text.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 5dad2c58..559bd365 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -16,6 +16,7 @@ * Fixed crash when a line contains nothing but an ANSI escape sequence. * Fixed a possible crash when saving state of subscribed feeds. * Fixed the right-hand sidebar handling the U and Shift+U key events if it was showing the Feeds tab, even though the sidebar was hidden. +* Fixed line wrapping at backslashes. They are now considered word-breaking characters. ## 1.10.2 * Fixed cancelling an input query. Now pressing Cancel will navigate back to the previous page as intended. diff --git a/src/ui/text.c b/src/ui/text.c index 7bb418eb..66231348 100644 --- a/src/ui/text.c +++ b/src/ui/text.c @@ -1559,7 +1559,7 @@ static iRect run_Font_(iFont *d, const iRunArgs *args) { iAssert(xAdvance >= 0); if (wrapMode == word_WrapTextMode) { /* When word wrapping, only consider certain places breakable. */ - if ((prevCh == '-' || prevCh == '/') && !isPunct_Char(ch)) { + if ((prevCh == '-' || prevCh == '/' || prevCh == '\\') && !isPunct_Char(ch)) { safeBreakPos = logPos; breakAdvance = wrapAdvance; breakRunIndex = runIndex; -- cgit v1.2.3 From c0483b4ded7c78164d5293eaf95ae18ebaa37c86 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sun, 30 Jan 2022 13:39:42 +0200 Subject: Cleanup --- res/about/version.gmi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 559bd365..40904c6a 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -7,8 +7,8 @@ # Release notes ## 1.10.3 -* Added a man page. -* Hide the [+] on the row of tab buttons if the navbar has a New Tab button. +* Unix: Added a lagrange(1) manual page. +* Hide the [+] button on the tab button row if the navbar has a New Tab button. * "/index.gmi" is considered equal to "/" when navigating to parent directory. * Gopher: Fixed navigating to root, e.g., when clicking on the page top banner. Set item type to 1 to show a gophermap and not the plain source. * Titan: When navigating to parent/root, switch URL scheme to "gemini". This action occurs on a Titan response page, so initiating a new upload with the parent/root URL is probably not appropriate. -- cgit v1.2.3 From 5b56e2e2864c128366f07aac78d62d6850351ce5 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sun, 30 Jan 2022 13:59:46 +0200 Subject: Release notes broken to smaller pages --- CMakeLists.txt | 2 + res/about/version-0.13.gmi | 246 ++++++++++++++++++ res/about/version-1.5.gmi | 371 +++++++++++++++++++++++++++ res/about/version.gmi | 610 +-------------------------------------------- src/gmrequest.c | 6 + src/resources.c | 4 + src/resources.h | 2 + 7 files changed, 633 insertions(+), 608 deletions(-) create mode 100644 res/about/version-0.13.gmi create mode 100644 res/about/version-1.5.gmi (limited to 'res/about') diff --git a/CMakeLists.txt b/CMakeLists.txt index d9bde7fd..45c3ae3d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,6 +118,8 @@ elseif (ANDROID) else () list (APPEND RESOURCES res/about/help.gmi + res/about/version-0.13.gmi + res/about/version-1.5.gmi res/about/version.gmi res/arg-help.txt ) diff --git a/res/about/version-0.13.gmi b/res/about/version-0.13.gmi new file mode 100644 index 00000000..72434f76 --- /dev/null +++ b/res/about/version-0.13.gmi @@ -0,0 +1,246 @@ +# Release notes + +=> about:version-1.5 Newer versions + +## 0.13.2 +* Added a little spinner to indicate ongoing requests. +* Fixed very thin progress bar on HiDPI displays. +* Fixed link to Help page from the Identities sidebar tab. +* Fixed incorrect text colors in the UI (e.g., selected lookup result). +* macOS: Disable menu shortcuts for navigation when editing text to prevent accidental page changes. + +## 0.13.1 +* Fixed build failure on Linux. + +## 0.13 +* Support for Internationalized Domain Names (IDN) in network requests. +* Percent-encoded URL paths are shown decoded in the UI, and encoded in outgoing requests. +* Added option to disable decoding of percent-encoded paths for the UI. +* Quick search via URL bar shows entries from subscribed feeds. +* Added keybindings for zooming. +* Improved usability of page content searching (${CTRL+}F, Escape). +* Clicking on a certificate warning shows the Certificate Status dialog. +* macOS: Keyboard shortcuts in native menus are updated according to bindings. +* Tweaked handling of Emojis in monospace text. They are given more space as needed, but the original monospace spacing is restored after whitespace. +* Fira Mono replaced with Iosevka Term Extended. +* Fixed use of variable-width fonts in input fields. +* Fixed handling of Unicode joiners and modifiers (by ignoring them, since we lack the glyphs). +* Fixed a layout issue with sidebars where the bottommost content line was occasionally not visible. +* Fixed exit when a hook program didn't read its input. +* Fixed crash when using an identity (with LibreSSL on OpenBSD). + +## 0.12.1 +* 'text/*' content falls back to plain text. +* Minimized visual artifacts in Unicode box-drawing characters (overlapping/gaps) by fine-tuning glyph scaling. +* Fixed truncated tab titles when opening tabs in background. +* Fixed possible exit if hook program not found (SIGPIPE). +* REQUEST_URL is set in the environment when running MIME hooks. +* "about:debug" lists the configured MIME hooks. +* macOS: Fixed excessive CPU usage while idling. + +## 0.12 +* Added MIME hooks: pipe Gemini responses through external programs for arbitrary processing. (See "about:help" for usage.) +* Added a right-hand sidebar; have a sidebar on the right or on both sides at once. +* Added a clear warning banner when there is an issue with the server's TLS certificate. +* Follow Weiph/pikkulogs — subscribe to new headings on pages. +* Added UI for subscribing: feed name, entry type (Gemini feed or new headings). +* Added keyboard shortcut ${SHIFT+}${CTRL+}D for subscribing to page. +* Feeds sidebar is capped to 100 entries. "about:feeds" shows all known entries. +* Network connections have a timeout in case server doesn't respond at all. +* Adjusted spacing before/after links to reflect use of empty lines in the source. +* Clicking on page area unfocuses URL input field. +* Added keybindings for switching tabs. +* Gopher: Query links have a 🔍 icon. +* Fixed handling of "file:///" URIs on Windows. +* Fixed misaligned Unicode box-drawing characters. +* Fixed missing error page if status code is unknown (torture test 34). +* Fixed detection of invalid headers (torture test 39). +* Fixed rendering of soft hyphens (torture test 50). + +## 0.11 +* Added feed subscriptions. A subscription is any bookmark with the "subscribed" tag. Subscribed feeds are refreshed in the background while Lagrange is running. +* Added a new sidebar tab for feeds. +* Added "about:feeds" to show entries from all subscriptions on one page. +* Added icons for special bookmark tags, and context menu items for toggling "homepage" and "subscribed". +* Improved stability: fixed data races, undefined behavior, thread leaks. +* Wide preformatted blocks can be scrolled horizontally with the mouse wheel or trackpad. +* Line widths are slightly narrower for improved readability. +* Light mode UI color palette is less saturated, more sepia-toned. +* Tall menus/dialogs can be scrolled with the mouse wheel. +* Improved download progress updates: never update more often than the UI can be refreshed. +* macOS: Control-Click works as a right mouse click. +* Unix: Location of `xdg-open` is no longer hardcoded. +* Fixed large downloads (10 MB+) stopping prematurely due to a decryption error. +* Fixed window contents not being updated during window resizing. +* Fixed selection/search markers disappearing when scrolling down. +* Fixed displaying of "about:" URLs in history. +* Fixed build on FreeBSD (tested on 12.1). + +## 0.10 +* Added option to load inline images when pressing Space or ↓ for a more focused reading experience — just keep tapping a single key to proceed. If an image link is visible, it will be loaded instead of scrolling. This option is disabled by default. +* Added context menu item to save inline images to Downloads. +* Added an option to use a proxy server for Gemini requests. +* Added a new keyboard link navigation mode focusing on the home row keys. The default keybinding for this is "F". +* Added a keybinding to activate keyboard link modifier mode. The keyboard link keys are active while the modifier is held down. The default is ${ALT}. +* Clearing and resetting keybindings via a context menu. +* Added a Window tab in the Preferences dialog; moved some of the settings around for better organization. +* Improved page search visualization: if the match is inside a link URL, the link icon is now highlighted. Previously these matches were not visualized in any way. +* Improvements to URI parsing with regard to RFC 3986. Cases that are handled better are double slashes, query-only relative URIs, relative URIs that begin with a tilde, IPv6 literals, username in the authority. +* Replaced EB Garamond with Tinos for improved readability. +* Replaced Kosugi Maru with Noto Sans CJK JP for better glyph coverage. +* Fixed font sizing of level 3 headings. +* Fixed download progress indicators sometimes remaining visible even after leaving the page. + +## 0.9 +* Clicking on the top banner of a page (where the site icon and hostname are shown) navigates to the root directory of the site. +* Added menu items and keybindings for navigating to site root or the parent directory. +* Added option to use a monospace body text font on all Gemini and/or Gopher pages. +* Remember redirect source URLs as visited but not shown in the History tab. Note that "visited.txt" is no longer fully compatible if opened in an older version of Lagrange. +* "gopher:" scheme is allowed in command line arguments. +* XDG: .desktop file declares support for opening Gopher URLs. +* Fixed an issue where copying the URL input field would not place anything on the clipboard. +* Fixed the Lagrange window visibly changing position during launch. +* Fixed crash when a single percent sign was typed in an input field. +* macOS: Fixed native menu keyboard shortcuts causing redundant command activations. +* macOS: Fixed assigning keybindings when there is an equivalent native menu shortcut. + +## 0.8.1 +* Fixed potential lockup when navigating back to a query prompt. +* macOS: Improved handling of scroll wheel events from a mouse. + +## 0.8 +* Added support for Gopher. +* Added support for the full palette of 8-bit ANSI foreground colors. +* Added option to disable smooth scrolling. +* Added button to manually set server certificate as trusted (if the certificate is valid but untrusted). +* Added keybindings for Back/Forward navigation. +* Added a context menu item for opening HTTP links in the default browser even when a proxy is configured. +* Revised identity creation dialog: changed field order, added warning about temporary identities not being saved. +* ${CTRL+}Click opens tab in background, ${SHIFT+}${CTRL+}Click opens as foreground tab. The same modifier keys work with keyboard navigation. +* Improved word wrapping of emoticons (:D). +* Automatic redirects allowed when the destination URL uses the same scheme as the originating URL. For example, when using a proxy, HTTP(S) is allowed to automatically redirect to other HTTP(S) URLs. +* Windows: Fixed handling of drag-and-dropped and command line file paths. + +## 0.7.2 +* Fixed parsing of the server's response. In some cases it was possible that the response was only partially read. +* Fixed handling of TLS/SSL connection being closed without the socket being closed. + +## 0.7.1 +* Fixed build on OpenBSD. +* Fixed build with LibreSSL. +* Fixed a potential crash at app shutdown. +* Fixed a potential crash when a thread exits. +* Fixed a potential lockup when a thread exits. +* Linux/Unix: Open "mailto:" links with xdg-open instead of the web browser. + +## 0.7 +* Basic set of user-configurable key bindings. +* Sidebar: Added a "New Identity" button and a link to "about:help" if there are no identities. +* Faster drawing of certain UI elements: site icon and current heading in the left margin, unfocused input fields, timestamp at the end of the page. +* History is not updated until a network request finishes. +* Improved opening connections when multiple IP addresses are found for a hostname. +* Fixed handling of TLS/SSL errors and hostname lookup problems — an error page is shown. +* Fixed an issue where window contents were not being updated immediately after the window gets exposed when using, e.g., openbox or dwm. + +## 0.6 +* Added an indicator to visualize progress of network requests. +* Added new color themes for page content: Colorful Light, Black, Gray, Sepia, High Contrast. +* Added page content color theme selection in Preferences. +* Added quote indicator option: icon or vertical line. +* Added a new font for Korean glyphs. +* Smoother smooth scrolling, making it easier to keep one's eyes on the content throughout the motion. +* Windows: Register Lagrange as a handler of "gemini:" URLs. +* macOS: Fixed glitchy window dragging during audio playback. +* Fixed timestamps of cached pages. + +## 0.5 +* Added MP3 support in the audio player (using mpg123). +* Added volume control in the audio player. +* Metadata in Vorbis and MP3 audio content (title, artist, etc.) is shown in the audio player menu. +* Added new serif fonts: EB Garamond and Literata. +* Allow configuring separate fonts for headings and body text for better visual distinction. +* Preferences dialog remembers the previously open tab. +* Paste from clipboard on middle mouse button click. +* Open links in new tab with middle mouse button. +* Fixed failure to find resources when launching via PATH. +* Fixed color saturation setting not affecting the default color theme. +=> https://mpg123.org/ mpg123: MPEG audio player and decoder library + +## 0.4.1 +* Set keyboard focus to URL input field after opening a new tab. +* Pause other audio players when a new one is started. One can still choose to have multiple audio players playing simultaneously by unpausing them again. +* Fixed dismissing an audio player that is still downloading content. The partially downloaded data is discarded. +* Fixed saving pages whose name starts with a tilde. +* Fixed saving pages restored from cache. +* Windows: The app is now distributed as an installer created with Inno Setup. +* Windows: All binaries are signed. + +## 0.4 +* Added audio playback with support for streaming. Supported audio formats in this release are WAV (PCM, mono/stereo, 8/16/24/32 integer/float) and Ogg Vorbis. Shoutout to Sean Barrett et al. for stb_vorbis. +* Added inline audio player that works like inline images. Clicking on an audio link opens the audio player below the link (works for URLs that have file extension .wav/.ogg). +* Visual fine-tuning: increased Fira Sans line spacing; list bullets use an accent color; adjusted accent colors in the light mode palette. +* Sidebar has a maximum width — the document must remain visible. +* Windows: Support for HiDPI displays and the system UI scaling factor. The UI will be scaled according to your settings automatically without having to adjust the UI scaling in Preferences. +* macOS: Use OpenGL on 10.13 for potentially better compatibility. +* Fixed a memory leak when closing tabs. +* Fixed unnecessary continual window redrawing related to the scrollbar hover outline. +=> https://github.com/nothings/stb stb: single-file public domain libraries for C/C++ + +## 0.3 +* Added style customization. +* Added new font option: Fira Sans. +* Added a setting for maximum line width. +* Added a setting for adjusting color saturation. +* Added an option for "Outline on scrollbar": page outline appears when mouse is hovering over the scrollbar. +* Added an option for site icon and current top heading that appear when the window is wide enough. +* Added tabs in Preferences for better grouping. +* Added "Open Link in Background Tab" in link context menus. +* More flexible text selection behavior when starting on empty space. +* Smaller first paragraph font size. +* Fixed centering of popups so they remain centered when window is resized. +* Fixed sizing and alignment of Unicode symbols in preformatted text. +* Fixed sizing of Japanese glyphs in UI text (e.g., tab titles). + +## 0.2.1 +* Fixed window size/state restoration issues, e.g., after window is maximized. +* Windows: Fixed text disappearing when window is resized. + +## 0.2 +* Added an icon for quote paragraphs. +* Added Downloads folder to Preferences. +* Added "Save to Downloads" menu item (${CTRL+}S) for saving page contents. +* Added a download progress indicator in the URL input field. +* Added a progress indicator for inline image fetching. +* Added `--sw` option to force software rendering. +* Added macOS touch bar buttons for Back, Forward, Find, New Tab, and sidebar modes. +* Home button opens a random bookmark with the "homepage" tag. +* Improved context menu when right-clicking on links or the page. +* Recognize and handle "mailto:" links. +* Fixed behavior of images on single-image pages; cannot be hidden like inline images. +* Fall back to software rendering automatically if accelerated graphics are not available. +* Minor bug fixes. + +## 0.1.1 +* Fixed a potential crash at startup. +* Fixed bug where user's query input is handled by all tabs. +* Default sidebar mode is Bookmarks. +* Windows: Fixed opening HTTP links in the default web browser. + +## 0.1 +* The major version zero is reserved for non-feature-complete releases. +* Beautiful typography using Unicode fonts. +* Autogenerated page style and Unicode icon for each Gemini domain. +* Smart suggestions when typing the URL — search bookmarks, history, identities. +* Sidebar for page outline, managing bookmarks and identities, and viewing history. +* Multiple tabs. +* Identity management — create and use TLS client certificates. +* Light and dark UI themes. +* Select and copy text with the mouse. +* Find text on the page. +* Open image links inline on the same page. +* Open links via keyboard shortcuts. +* Instant back/forward navigation. +* Smooth scrolling. +* Scaling page content (50%...200%). +* Scaling factor for the UI (for arbitrary monitor DPI). +* Persistent app state — tabs and history are restored on next run. diff --git a/res/about/version-1.5.gmi b/res/about/version-1.5.gmi new file mode 100644 index 00000000..c970a908 --- /dev/null +++ b/res/about/version-1.5.gmi @@ -0,0 +1,371 @@ +# Release notes + +=> about:version Newer versions + +## 1.5.2 +* Fixed pasting a PEM-formatted certificate and/or private key via clipboard in Import Identity. +* Possible workaround for a visual glitch in the URL field. +* Specify `StartupWMClass` in .desktop file. +* Normalize page contents to avoid the most common issues with diacritics (Unicode NFC). +* Expanded the set of recognized custom link icons. +* Updated "Smol Emoji" font with new glyphs. +* Allow use of TLS cipher "DHE-RSA-AES256-GCM-SHA384". + +## 1.5.1 +* Updated UI translations. +* Updated "Smol Emoji" font with new and improved glyphs. + +## 1.5 +* Added "Smol Emoji" and "Noto Sans Symbols" fonts, removed Symbola. +⚠️ Many Emoji and pictographs defined in the last five years are currently missing. +* Added document footer buttons: on certain pages (e.g., error messages) show relevant actions in the bottom of the page. For example, if a certificate is required for viewing a page, show buttons for creating a new identity and showing the Identities sidebar. +* Error pages include the human-readable text sent by the server. +* Disregard old feed entries whose unread status would have been forgotten. +* Added UI language: Polish. + +Identity management: +* Revised New Identity dialog. An option is provided to automatically use the new identity on the current domain/page. The additional fields are hidden by default. +* Improved usability of Identities sidebar. No more accidental activations: left-clicking an identity opens the context menu without making any changes. The context menu shows each active URL as a menu item for easy access. Identity icons reflect the usage status: all identities used on the current domain get highlighted in addition to the currently used one. +* Identities can be exported: certificate and private key are opened in a new tab in plain text PEM format. +* Fixed issues with identity usage: a higher-up URL overrides and deactivates all contained URLs to avoid redundant activation. + +Text input: +* Revised text input widgets: added support for multiple lines, and when entering user response to a query, show how many bytes are remaining for the response URL about to be submitted. In dialogs, input fields expand vertically instead of scrolling their content horizontally. +* Input widgets allow inserting newlines using Shift+Return. +* Disallow sending query responses that are too long (1024 bytes maximum). +* Shift-click to select a range of text in input widgets (i.e, without dragging). + +Rendering: +* Animate showing and hiding of sidebars and dialogs. Animations are enabled by default, by can be disabled with Preferences > Interface > Animations. +* Added setting for a custom TrueType symbol font for any missing characters. Note: Must be a .TTF file — OpenType and bitmap fonts are not supported. +* Link navigation shortcut icons (home row and numbered) are drawn with a consistent appearance. +* Improved icon alignment in lists. +* Reduced line gap between word-wrapped top-level headings. +* Modal dialog background dimming fades in/out smoothly. +* macOS: Workaround for an issue that causes UI refresh to pause occasionally for ~100 ms. + +Split view: +* Added keybindings for split view menu items. +* Changed default split view keys to conform to Emacs (3 for horizontal, 2 for vertical split). +* Fixes and improvements for touch screen event handling in split view mode. + +Command line: +* Added --url-or-search (-u) command line option. Depending on the parameter, either open an URL or make a search query. +* Open all URLs/files specified on the command line in new tabs, and raise the window if the app is already running. (Kudos to Alyssa Rosenzweig.) + +Gempub: +* Linear navigation through the book with Left/Right arrow keys and via footer buttons. The navigation order is determined by links on the Gempub index page. + +## 1.4.2 +* Fixed UI colors being all black on the first run. +* Fixed right mouse click on an inactive split not having any effect. +* Fixed action buttons showing under the Help link in an empty Identities sidebar. +* Fixed potential crash at shutdown. +* Fixed minor UI layout issues. + +## 1.4.1 +* Fixed removing the left side split by closing all its tabs. The URL input field got confused about which tab was currently open, and the wrong theme was active. +* Fixed tab merging when unsplitting the window: keep the currently active tab open. +* Fixed issue with sidebars sometimes becoming unresponsive. +* Fixed font used for visited monospace Gopher links. +* Fixed incorrectly shown/hidden ◧ indicator. +* Fixed scrollbar in Preferences > Keys being hidden until the list is scrolled. + +## 1.4 +* Added split view modes: two tabs at once, horizontal/vertical split, 1:1/2:1/1:2 weights, merge tabs, swap sides. See section 1.8 in Help for details. +* Split view pinning: keep a page pinned on one side while all opened links go to the other side. +* "file://" URLs can be used for viewing contents of local directories and ZIP archives. +* Basic Gempub support: a cover page is generated based on metadata, and there's an automatic split view for index and contents. On macOS, Lagrange is registered as a viewer of .gpub files. +* Bold link styling is used for indicating which links are unvisited. +* Page rendering was optimized: now each line of text is rendered into the view buffer only once, and whenever the view is stationary, content is prefilled in the available space outside the viewport. Previously, at least one line of text was rendered every frame when the viewport was moving, which was mostly redundant. +* Added UI languages: Interlingua, Toki Pona. +* Added "New"/"Import" buttons in the bottom of the Identities tab. +* Added an "All"/"Unread" mode switch in the bottom of the Feeds tab. +* Added toggles for special tags in the bookmark creation/editor dialog. +* Added "Show Downloads" to the File/main menu. +* Added "Open Downloaded File" to the file save dialog to make it easy to find the local copy of the file. +* Updated the UI font to Source Sans 3. It now has all the styles and weights needed for page rendering, too. +* Added a semibold Fira Sans weight (used for unvisited links). +* Preferences: Reorganized the fonts dropdown menu. +* Changed popup dismiss behavior so that a click outside just dismisses the popup and does not trigger further actions. +* All lists support smooth scrolling. +* Multitouch scrolling: each finger can scroll a different widget. +* Adjustments to how display DPI affects UI scaling. +* Fixed allocation of page rendering buffers. Previously, some buffers may have gone unused or were allocated erroneously to the same position, causing unnecessary work for the page renderer. +* Fixed various issues in the UI layout. +* Fixed parsing URI scheme (limited set of characters allowed). +* Don't percent encode equal signs in URL paths. + +## 1.3.4 +* Allow server certificates with a `*.tld` subject wildcard. +* Updated the French UI translation. +* Fixed media type check in the audio player. Media types with parameters failed to be recognized. +* Fixed crash after a redirect. +* Fixed a rare issue with handling multiple rapid network requests. +* Fixed a rare situation where a network connection would fail to open. +* Minor stability improvements. + +## 1.3.3 +* Added UI languages: French, German. (Note that neither is 100% finished yet.) +* Added build option to disable IPC for compatibility reasons. +* Added environment variable LAGRANGE_OVERRIDE_DPI. +* Back/forward navigation buttons are disabled if they have no more pages to switch to. +* Minor UI color tuning. +* Fixed possible crash when closing a tab. +* Fixed possible crash when restoring application state at launch. +* Fixed problems parsing and making requests with literal IPv6 addresses. + +## 1.3.2 +* Fixed crash after updating from v1.2 due to undefined CA file/path configuration. +* Fixed conflation of pixel ratio and display DPI. Pixel ratio is now always separately detected so mouse events can be correctly positioned. You may find that adjusting the UI scale factor (Preferences > Interface) is necessary after upgrading. +* Fixed sidebar width changing when moving the window to a different display. +* Fixed inability to use Tab in keybindings. +* Fixed opening Gopher URLs via drag-and-drop. +* Fixed "Add bookmark..." on a feed entry. +* Fixed keybindings list not being updated immediately when UI language changes. +* Fixed trimming of link label text when a custom Emoji is used. +* Windows: Fixed maximum window size being restricted to the initial display's size. + +## 1.3.1 +* Added UI languages: Serbian, Interlingue. +* Added option to disable bold links for light/dark backgrounds. +* Updated the Nunito font to the latest version. +* Fixed crash during word wrapping. +* Fixed keybindings overriding the home row key navigation mode. +* Fixed kerning in the text renderer. +* Fixed issue with overlapped drawing of list bullets vs. list items. +* Fixed cropped list bullets when using Literata. +* Fixed whitespace normalization in plain text files (tab characters). +* Fixed issues buffering window contents, possibly causing missing font glyphs. + +## 1.3 + +Localization: +* Added the first set of UI translations: Chinese (Simplified, Traditional), Finnish, Russian, and Spanish. Many thanks to the translators! +* Added page content translation using a LibreTranslate instance running on `xlt.skyjake.fi`. This is somewhat experimental and may occasionally mess up Gemtext markup. Expect long pages to be quite slow to translate (more than a minute). +=> https://weblate.skyjake.fi/projects/lagrange/ui Lagrange UI translations (Weblate project) +=> https://libretranslate.com More information about LibreTranslate +=> gemini://skyjake.fi/lagrange/privacy.gmi Lagrange privacy policy + +Resources: +* Added Noto Sans CJK (Simplified Chinese) font. +* Added Noto Sans Arabic font. Note that right-to-left/bidirectional text rendering is *not* implemented yet. +* Added "about:about" that lists all the available "about:" pages. + +Browsing: +* Alt text is shown when hovering over a preformatted block. +* Clicking on a preformatted block collapses it, leaving only the alt text. +* Added option to collapse all preformatted blocks on page load. +* A server certificate can also be verified by Certificate Authorities. When "CA file" and/or "CA path" are set in Preferences, CA verification will mark a certificate as trusted. +* Relaxed TOFU certificate checking when it comes to domain names: `domain.tld` in a certificate is implicitly considered to also mean `*.domain.tld`. +* Fixed handling of IDNs when the user sets a server certificate as trusted via the UI. +* Fixed handling of unknown URI schemes. Previously they were forcefully converted to absolute URIs, breaking them. + +Page content and rendering: +* Color adjustments to the "Colorful Dark", "Colorful Light", and "Gray" themes. "Gray" looks different in dark and light UI modes. +* Spacing of bullet lists vs. link lists is more consistent. +* Links are shown in bold, and tinted with the page theme color for more coherent appearance. +* Custom link icons: Gemini links whose destination is on the same domain use as icon the Emoji or other pictograph at the start of the link label. (For example, see Astrobotany menus.) +* Added option to wrap lines in plain text files. This is on by default because there is no horizontal scrolling for plain text. +* Large images are downscaled to an appropriate size for presentation. +* Improved font glyph caching to reduce stuttering during scrolling. All required glyphs are cached after a page load finishes. This allows more efficient copying of glyphs as the operations can be batched. +* Larger content buffers for scrolling, reducing need to redraw content. +* Gopher: Handling the 'h' line type. +* Fixed minor issues with word wrapping. +* Fixed minor blending artifacts with the current heading shown on the right side of the page. + +User interface: +* Improved event handling to support touch screens on any platform (if supported by SDL). +* UI scaling factor is applied immediately when closing Preferences. Restarting is no longer necessary. +* Window rescaled automatically when moving it to a display with a different DPI. +* Added unread feed entry count to the sidebar. +* Added a context menu for toggling sidebars. The menu appears when right-clicking on the navbar or on the sidebar tab buttons. +* Double/triple click selection modes. Double click and drag will select by word, triple click by paragraph. +* Popup menus have icons for items to make it faster to find the item you're looking for. +* Soft shadows for popup menus. +* Scrollbars fade away on macOS/iOS and dim on other platforms. +* Reload button moved into the URL field. +* Narrow URL input fields will not display the default "gemini" scheme. +* Domain name is highlighted in URL fields. +* Added a cut/copy/paste context menu to input fields. +* Added an "Import..." button to the empty Identities sidebar. +* Preferences dialog was partially reorganized for clarity. +* Tabs in Preferences look the same as tabs in the sidebar. +* Cleaner appearance for unread feed items in the sidebar. +* Dialog buttons show the corresponding shortcut key. +* Fixed background activity indicators overlapping each other. +* Fixed glitches when widgets extend beyond the left edge of the window. +* Fixed use of plurals in UI strings, enabling support for three or more plural forms. + +Keybindings: +* Default page scroll keybindings changed: PageUp/Down scroll a whole page, and Space/Shift+Space scrolls half a page. If you're changed these bindings, note that they will be reset to defaults. +* Added keybinding for subscribing to a page. +* Keyboard modifiers can be remapped using the `modmap.txt` configuration file. +* Caps Lock can be used as a modifier key. +* Internet hot keys (if present on a keyboard) can be used to navigate back/forward and reload the page. + +Command line use: +* Added conventional `--help`, `--version` options. +* A previously started instance can be controlled with command line options. +* `--list-tab-urls` prints a list of the currently open URLs in the running instance. + +Bug fixes: +* Only one instance of Lagrange is allowed to run per user directory. This prevents instances from overwriting each other's data. +* Fixed use of multiple search terms for quick lookup. +* Fixed handling of multiple feeds having an entry with the same URL. +* Fixed percent-decoding of URLs on the command line and coming in via system URL handlers. + +## 1.2.3 +* Fixed XML parser hanging on numeric character entities. +* Fixed "Monospace Body" option causing Gemtext line markup to be visible. +* Fixed bookmarking a wrapped link. Now the entire label text gets used instead of just the clicked segment. +* Fixed handling of non-advancing monospace glyphs. +* CMake: Automatically check if `lib/the_Foundation` is up-to-date. +* CMake: Build configuration fails if an SSL library is not found. +* Reverted default bookmarks having "Getting Started" as a remote bookmark source. Now it's just a regular bookmark. + +## 1.2.2 +* Stability improvements. +* Whitespace is no longer normalized when using the monospace body setting. +* Fixed issues with percent-encoded Gopher paths. +* macOS: Try to prevent forced use of high-performance GPU. + +## 1.2.1 +* Fixed crash when creating a bookmark. + +## 1.2 + +New features: +* Atom feed subscriptions: Atom XML documents are automatically converted to Gemini feed index pages. This is a built-in version of the Atom-to-Gemini example on the Help page. +* Inline downloads: right-click on any link that is openable inside Lagrange and select "Download Linked File". +* Editable bookmark icons: use your favorite Unicode character as the symbol to represent a bookmarked site. +* Searching via URL field: non-URL text entered in the field is passed onto the configured search query URL (Preferences > Network). An indicator is shown if a query will take place. +* Tab auto-reloading: configure a reloading interval using the page context menu ("Set Auto-Reload..."). Auto-reloading is part of the persistent state of the tab. +* "Iosevka" and "Source Sans Pro" (the UI font) can be used as heading and body fonts. +* User preference for aligning all pages to the top of the window. +* Keybinding (F11) for toggling fullscreen mode. On macOS, the shortcut is ⌃⌘F as before. +* Keybinding for finding text on page. + +UI design: +* Enhanced navbar: adjusted spacing, URL field has a maximum width, tab titles have less pronounced borders. +* Improved sidebar appearance: bold subheadings, larger feed icons, adjusted spacing, background color. +* Font consistency: all UI elements use the same font (i.e., no more monospace input fields). +* Added setting for UI accent color (teal, orange). +* General fine-tuning of the color palette. +* Dialog buttons are aligned to the right edge, leaving room for additional action buttons on the left. +* Page Information button is embedded in the URL field. +* Page Information dialog is attached to its button. +* Site icons use a different color in tab titles for visual distinction. +* Fade background behind modal dialogs. +* Responsive page margins. +* Windows: Added a custom window frame to replace the default Windows one. This looks nicer but does not behave exactly like a native window frame. Added a setting to Preferences for switching back to the default frame. + +Other changes: +* Help is opened on first run instead of the "About Lagrange" page to make it easier to discover important Gemini links like the FAQ. +* "Go to Root" respects a user name found in the URL. One can still "Go to Parent" to get above the user level. +* Feed entries are sorted by refresh time if they are published on the same date. +* Don't show future-dated feed entries in Feeds. +* Middle-clicking on links: open new tab in background or foreground depending on the Shift key. +* Shift+Insert can be used for pasting clipboard contents into input fields. +* Removed a strange violet-on-green color theme pairing. + +Bug fixes: +* Fixed text prompt dialogs closing and accepting the entered text when switching focus away from the app. +* Scroll position remains fixed while horizontally resizing the window or sidebars. +* Fixed a crash when opening the audio player menu. +* Fixed Gopher requests that were using URL (percent) encoded characters. +* Windows: Fixed a flash of white when the window is first opened. + +## 1.1.4 +* Fixed feed entry highlight/read status issue in the sidebar. +* Fixed Gopher menu links that contain spaces. +* Fixed vertical alignment of short pages: top banner is excluded because it is not part of the content. + +## 1.1.3 +* Fixed crash when deleting a bookmark that was being used as a remote bookmark source. +* Fixed potential crash at shutdown. +* Fixed URL path decoding not respecting reserved characters. +* AppImage: Disable SSE 4.1 for improved compatibility. +* Windows: Fixed portable build so it stores user files under the "userdata" directory and not under AppData\Roaming\. + +## 1.1.2 +* Fixed potential crash at launch. +* Fixed input query from a background tab being applied to the foreground tab. An input query now forces a tab to the foreground. +* Fixed window scroll position moving when resizing vertically. +* Fixed feed refresh waiting forever if a server doesn't respond. +* Fixed hover state not being cleared when right-clicking links. +* Fixed remote bookmarks not appearing if they lacked a user-friendly name on the source page. + +## 1.1.1 +* Fixed focus cycling inside dialogs. Widgets outside a dialog are not allowed to be focused. +* Fixed missing cursor in the New Identity "Valid until" field. +* Fixed "Import Links as Bookmarks" so it can be used to import local copies of remote bookmarks when viewing the remote source page. +* Fixed a cosmetic issue in the Import Identity dialog where part of the widget frames were not drawn. +* Fixed word wrapping issue in unread feed entry titles. +* Fixed opening a URI that contains a fragment in the default browser. The fragment is no longer omitted. +* Fixed default value for the Line Width setting. +* Linux: Check monitor DPI for UI scaling like on Windows and macOS. +* Allow reloading the same URL when clicking on a link or bookmark, or pressing Enter in the navbar. +* Bookmark URLs are normalized by removing the default Gemini port. +* Added a list of environment variables to "about:debug". +* XDG: Respect `XDG_CONFIG_HOME` environment variable for storing user files. +* XDG: Use the configured XDG download directory as default Downloads location. +* The default set of bookmarks now uses a remote source. +=> gemini://skyjake.fi/lagrange/getting_started.gmi "Getting Started" bookmarks + +## 1.1 +* Added identity importing: existing client certificates in PEM format can be imported from the current page, from clipboard, or from drag-and-dropped files. +* Added setting for maximum cache size. This is the amount of fetched data kept in memory for page navigation and content lookup. The default is 10 MB. +* Added option to show full link URL when hovering on it. +* Added support for Finger links (courtesy of John Cowan). +* Added keybindings for page reload, opening link in new tab via home row keys (${SHIFT+}F), and hovering on a link via home row keys (H). +* Added keybinding for switching to next set of links for home row navigation. +* Added keybindings for new tab, close tab, adding a bookmark. +* Added a bold UI font. It is used for unread feed entries and default dialog buttons. +* Better alignment of quick lookup result icons and labels. +* Remote bookmarks are grouped under their source in the bookmark list. +* A bookmark's icon is updated after loading the page so it matches the site. +* Trusting a new server certificate manually will update the current page without reloading. +* Middle-clicking on a tab title closes the tab. +* Internal state files now use an ".lgr" extension. If downgrading after running v1.1, note that the old version will not read these. +* Fixed timestamps of visited URLs. Your browsing history will be cleared but can still be viewed manually in "visited.txt". +* Fixed issue where "heading" feed entries would turn unread after a while. +* Fixed duplicate U key for home row navigation. +* Fixed an issue with Unicode characters in quick lookup search terms. + +## 1.0.3 +* Improved font glyph caching: only rasterize glyphs when drawing text, and retry after failure. This makes initial document layout faster and avoids issues with permanently lost glyphs. +* Fixed parts of text disappearing when the glyph cache fills up. The cache also uses less memory now. +* Fixed percent-encoding of spaces when copying URLs to clipboard. +* Fixed feed entry context menu showing the wrong menu item for Mark as Read/Unread. +* Fixed parentheses and brackets being trimmed from feed entry titles. +* Fixed quotes appearing continuous even when there are empty lines in between. +* Fixed quote border line not showing up on empty quote lines. +* Fixed handling of redirection in a background tab — redirected URL would open in the current tab. +* Fixed Gemini URL normalization with regard to default port. +* Fixed a very minor memory leak. +* Fixed missing "gopher:" URL scheme registration on macOS. + +## 1.0.2 +* Fixed URL input field showing the wrong URL when opening tabs in the background. +* Fixed trusting a renewed server certificate when multiple tabs are open. +* Fixed opening sidebar feed entries in new/background tab with modifier keys. +* Fixed editing identity notes. The entered new notes were not being applied. +* Server certificate domain name check accepts a matching CN even when SAN doesn't match. + +## 1.0.1 +* Fixed percent-encoding of the query string. +* Fixed cursor positioning in input fields. + +## 1.0 +* Added remote bookmarks. Any bookmarked 'text/gemini' page with the "remotesource" tag is a source of remote bookmarks. Each link on the page is shown as a remote bookmark in Bookmarks. +* Added a way to export bookmarks via the special page "about:bookmarks". The page can also list all bookmarks by tag or by creation date. +* Added context menu item for duplicating a bookmark. +* Import all links on a page as bookmarks. (Importing tags is not supported in this version.) +* Links can be bookmarked via context menu. +* Open links with an unrecognized scheme in the default browser. +* Open sidebar items in new/background tab via context menu or modifier keys. +* "Edit Feed..." menu item shows the Feed Settings dialog. +* Removed unimplemented menu items. + +=> about:version-0.13 Older versions diff --git a/res/about/version.gmi b/res/about/version.gmi index 40904c6a..1bd04885 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -10,6 +10,7 @@ * Unix: Added a lagrange(1) manual page. * Hide the [+] button on the tab button row if the navbar has a New Tab button. * "/index.gmi" is considered equal to "/" when navigating to parent directory. +* Navigating to parent or root from "about:" pages goes to "about:about" to see overview of all the About pages. * Gopher: Fixed navigating to root, e.g., when clicking on the page top banner. Set item type to 1 to show a gophermap and not the plain source. * Titan: When navigating to parent/root, switch URL scheme to "gemini". This action occurs on a Titan response page, so initiating a new upload with the parent/root URL is probably not appropriate. * Fixed crash when a media player is active and a new download is started. @@ -357,611 +358,4 @@ Fixes: * Gopher: All preformatted blocks are unindented to avoid misaligned ASCII art. * macOS: ^⌘Space shows the system-provided symbols and Emoji character palette. -## 1.5.2 -* Fixed pasting a PEM-formatted certificate and/or private key via clipboard in Import Identity. -* Possible workaround for a visual glitch in the URL field. -* Specify `StartupWMClass` in .desktop file. -* Normalize page contents to avoid the most common issues with diacritics (Unicode NFC). -* Expanded the set of recognized custom link icons. -* Updated "Smol Emoji" font with new glyphs. -* Allow use of TLS cipher "DHE-RSA-AES256-GCM-SHA384". - -## 1.5.1 -* Updated UI translations. -* Updated "Smol Emoji" font with new and improved glyphs. - -## 1.5 -* Added "Smol Emoji" and "Noto Sans Symbols" fonts, removed Symbola. -⚠️ Many Emoji and pictographs defined in the last five years are currently missing. -* Added document footer buttons: on certain pages (e.g., error messages) show relevant actions in the bottom of the page. For example, if a certificate is required for viewing a page, show buttons for creating a new identity and showing the Identities sidebar. -* Error pages include the human-readable text sent by the server. -* Disregard old feed entries whose unread status would have been forgotten. -* Added UI language: Polish. - -Identity management: -* Revised New Identity dialog. An option is provided to automatically use the new identity on the current domain/page. The additional fields are hidden by default. -* Improved usability of Identities sidebar. No more accidental activations: left-clicking an identity opens the context menu without making any changes. The context menu shows each active URL as a menu item for easy access. Identity icons reflect the usage status: all identities used on the current domain get highlighted in addition to the currently used one. -* Identities can be exported: certificate and private key are opened in a new tab in plain text PEM format. -* Fixed issues with identity usage: a higher-up URL overrides and deactivates all contained URLs to avoid redundant activation. - -Text input: -* Revised text input widgets: added support for multiple lines, and when entering user response to a query, show how many bytes are remaining for the response URL about to be submitted. In dialogs, input fields expand vertically instead of scrolling their content horizontally. -* Input widgets allow inserting newlines using Shift+Return. -* Disallow sending query responses that are too long (1024 bytes maximum). -* Shift-click to select a range of text in input widgets (i.e, without dragging). - -Rendering: -* Animate showing and hiding of sidebars and dialogs. Animations are enabled by default, by can be disabled with Preferences > Interface > Animations. -* Added setting for a custom TrueType symbol font for any missing characters. Note: Must be a .TTF file — OpenType and bitmap fonts are not supported. -* Link navigation shortcut icons (home row and numbered) are drawn with a consistent appearance. -* Improved icon alignment in lists. -* Reduced line gap between word-wrapped top-level headings. -* Modal dialog background dimming fades in/out smoothly. -* macOS: Workaround for an issue that causes UI refresh to pause occasionally for ~100 ms. - -Split view: -* Added keybindings for split view menu items. -* Changed default split view keys to conform to Emacs (3 for horizontal, 2 for vertical split). -* Fixes and improvements for touch screen event handling in split view mode. - -Command line: -* Added --url-or-search (-u) command line option. Depending on the parameter, either open an URL or make a search query. -* Open all URLs/files specified on the command line in new tabs, and raise the window if the app is already running. (Kudos to Alyssa Rosenzweig.) - -Gempub: -* Linear navigation through the book with Left/Right arrow keys and via footer buttons. The navigation order is determined by links on the Gempub index page. - -## 1.4.2 -* Fixed UI colors being all black on the first run. -* Fixed right mouse click on an inactive split not having any effect. -* Fixed action buttons showing under the Help link in an empty Identities sidebar. -* Fixed potential crash at shutdown. -* Fixed minor UI layout issues. - -## 1.4.1 -* Fixed removing the left side split by closing all its tabs. The URL input field got confused about which tab was currently open, and the wrong theme was active. -* Fixed tab merging when unsplitting the window: keep the currently active tab open. -* Fixed issue with sidebars sometimes becoming unresponsive. -* Fixed font used for visited monospace Gopher links. -* Fixed incorrectly shown/hidden ◧ indicator. -* Fixed scrollbar in Preferences > Keys being hidden until the list is scrolled. - -## 1.4 -* Added split view modes: two tabs at once, horizontal/vertical split, 1:1/2:1/1:2 weights, merge tabs, swap sides. See section 1.8 in Help for details. -* Split view pinning: keep a page pinned on one side while all opened links go to the other side. -* "file://" URLs can be used for viewing contents of local directories and ZIP archives. -* Basic Gempub support: a cover page is generated based on metadata, and there's an automatic split view for index and contents. On macOS, Lagrange is registered as a viewer of .gpub files. -* Bold link styling is used for indicating which links are unvisited. -* Page rendering was optimized: now each line of text is rendered into the view buffer only once, and whenever the view is stationary, content is prefilled in the available space outside the viewport. Previously, at least one line of text was rendered every frame when the viewport was moving, which was mostly redundant. -* Added UI languages: Interlingua, Toki Pona. -* Added "New"/"Import" buttons in the bottom of the Identities tab. -* Added an "All"/"Unread" mode switch in the bottom of the Feeds tab. -* Added toggles for special tags in the bookmark creation/editor dialog. -* Added "Show Downloads" to the File/main menu. -* Added "Open Downloaded File" to the file save dialog to make it easy to find the local copy of the file. -* Updated the UI font to Source Sans 3. It now has all the styles and weights needed for page rendering, too. -* Added a semibold Fira Sans weight (used for unvisited links). -* Preferences: Reorganized the fonts dropdown menu. -* Changed popup dismiss behavior so that a click outside just dismisses the popup and does not trigger further actions. -* All lists support smooth scrolling. -* Multitouch scrolling: each finger can scroll a different widget. -* Adjustments to how display DPI affects UI scaling. -* Fixed allocation of page rendering buffers. Previously, some buffers may have gone unused or were allocated erroneously to the same position, causing unnecessary work for the page renderer. -* Fixed various issues in the UI layout. -* Fixed parsing URI scheme (limited set of characters allowed). -* Don't percent encode equal signs in URL paths. - -## 1.3.4 -* Allow server certificates with a `*.tld` subject wildcard. -* Updated the French UI translation. -* Fixed media type check in the audio player. Media types with parameters failed to be recognized. -* Fixed crash after a redirect. -* Fixed a rare issue with handling multiple rapid network requests. -* Fixed a rare situation where a network connection would fail to open. -* Minor stability improvements. - -## 1.3.3 -* Added UI languages: French, German. (Note that neither is 100% finished yet.) -* Added build option to disable IPC for compatibility reasons. -* Added environment variable LAGRANGE_OVERRIDE_DPI. -* Back/forward navigation buttons are disabled if they have no more pages to switch to. -* Minor UI color tuning. -* Fixed possible crash when closing a tab. -* Fixed possible crash when restoring application state at launch. -* Fixed problems parsing and making requests with literal IPv6 addresses. - -## 1.3.2 -* Fixed crash after updating from v1.2 due to undefined CA file/path configuration. -* Fixed conflation of pixel ratio and display DPI. Pixel ratio is now always separately detected so mouse events can be correctly positioned. You may find that adjusting the UI scale factor (Preferences > Interface) is necessary after upgrading. -* Fixed sidebar width changing when moving the window to a different display. -* Fixed inability to use Tab in keybindings. -* Fixed opening Gopher URLs via drag-and-drop. -* Fixed "Add bookmark..." on a feed entry. -* Fixed keybindings list not being updated immediately when UI language changes. -* Fixed trimming of link label text when a custom Emoji is used. -* Windows: Fixed maximum window size being restricted to the initial display's size. - -## 1.3.1 -* Added UI languages: Serbian, Interlingue. -* Added option to disable bold links for light/dark backgrounds. -* Updated the Nunito font to the latest version. -* Fixed crash during word wrapping. -* Fixed keybindings overriding the home row key navigation mode. -* Fixed kerning in the text renderer. -* Fixed issue with overlapped drawing of list bullets vs. list items. -* Fixed cropped list bullets when using Literata. -* Fixed whitespace normalization in plain text files (tab characters). -* Fixed issues buffering window contents, possibly causing missing font glyphs. - -## 1.3 - -Localization: -* Added the first set of UI translations: Chinese (Simplified, Traditional), Finnish, Russian, and Spanish. Many thanks to the translators! -* Added page content translation using a LibreTranslate instance running on `xlt.skyjake.fi`. This is somewhat experimental and may occasionally mess up Gemtext markup. Expect long pages to be quite slow to translate (more than a minute). -=> https://weblate.skyjake.fi/projects/lagrange/ui Lagrange UI translations (Weblate project) -=> https://libretranslate.com More information about LibreTranslate -=> gemini://skyjake.fi/lagrange/privacy.gmi Lagrange privacy policy - -Resources: -* Added Noto Sans CJK (Simplified Chinese) font. -* Added Noto Sans Arabic font. Note that right-to-left/bidirectional text rendering is *not* implemented yet. -* Added "about:about" that lists all the available "about:" pages. - -Browsing: -* Alt text is shown when hovering over a preformatted block. -* Clicking on a preformatted block collapses it, leaving only the alt text. -* Added option to collapse all preformatted blocks on page load. -* A server certificate can also be verified by Certificate Authorities. When "CA file" and/or "CA path" are set in Preferences, CA verification will mark a certificate as trusted. -* Relaxed TOFU certificate checking when it comes to domain names: `domain.tld` in a certificate is implicitly considered to also mean `*.domain.tld`. -* Fixed handling of IDNs when the user sets a server certificate as trusted via the UI. -* Fixed handling of unknown URI schemes. Previously they were forcefully converted to absolute URIs, breaking them. - -Page content and rendering: -* Color adjustments to the "Colorful Dark", "Colorful Light", and "Gray" themes. "Gray" looks different in dark and light UI modes. -* Spacing of bullet lists vs. link lists is more consistent. -* Links are shown in bold, and tinted with the page theme color for more coherent appearance. -* Custom link icons: Gemini links whose destination is on the same domain use as icon the Emoji or other pictograph at the start of the link label. (For example, see Astrobotany menus.) -* Added option to wrap lines in plain text files. This is on by default because there is no horizontal scrolling for plain text. -* Large images are downscaled to an appropriate size for presentation. -* Improved font glyph caching to reduce stuttering during scrolling. All required glyphs are cached after a page load finishes. This allows more efficient copying of glyphs as the operations can be batched. -* Larger content buffers for scrolling, reducing need to redraw content. -* Gopher: Handling the 'h' line type. -* Fixed minor issues with word wrapping. -* Fixed minor blending artifacts with the current heading shown on the right side of the page. - -User interface: -* Improved event handling to support touch screens on any platform (if supported by SDL). -* UI scaling factor is applied immediately when closing Preferences. Restarting is no longer necessary. -* Window rescaled automatically when moving it to a display with a different DPI. -* Added unread feed entry count to the sidebar. -* Added a context menu for toggling sidebars. The menu appears when right-clicking on the navbar or on the sidebar tab buttons. -* Double/triple click selection modes. Double click and drag will select by word, triple click by paragraph. -* Popup menus have icons for items to make it faster to find the item you're looking for. -* Soft shadows for popup menus. -* Scrollbars fade away on macOS/iOS and dim on other platforms. -* Reload button moved into the URL field. -* Narrow URL input fields will not display the default "gemini" scheme. -* Domain name is highlighted in URL fields. -* Added a cut/copy/paste context menu to input fields. -* Added an "Import..." button to the empty Identities sidebar. -* Preferences dialog was partially reorganized for clarity. -* Tabs in Preferences look the same as tabs in the sidebar. -* Cleaner appearance for unread feed items in the sidebar. -* Dialog buttons show the corresponding shortcut key. -* Fixed background activity indicators overlapping each other. -* Fixed glitches when widgets extend beyond the left edge of the window. -* Fixed use of plurals in UI strings, enabling support for three or more plural forms. - -Keybindings: -* Default page scroll keybindings changed: PageUp/Down scroll a whole page, and Space/Shift+Space scrolls half a page. If you're changed these bindings, note that they will be reset to defaults. -* Added keybinding for subscribing to a page. -* Keyboard modifiers can be remapped using the `modmap.txt` configuration file. -* Caps Lock can be used as a modifier key. -* Internet hot keys (if present on a keyboard) can be used to navigate back/forward and reload the page. - -Command line use: -* Added conventional `--help`, `--version` options. -* A previously started instance can be controlled with command line options. -* `--list-tab-urls` prints a list of the currently open URLs in the running instance. - -Bug fixes: -* Only one instance of Lagrange is allowed to run per user directory. This prevents instances from overwriting each other's data. -* Fixed use of multiple search terms for quick lookup. -* Fixed handling of multiple feeds having an entry with the same URL. -* Fixed percent-decoding of URLs on the command line and coming in via system URL handlers. - -## 1.2.3 -* Fixed XML parser hanging on numeric character entities. -* Fixed "Monospace Body" option causing Gemtext line markup to be visible. -* Fixed bookmarking a wrapped link. Now the entire label text gets used instead of just the clicked segment. -* Fixed handling of non-advancing monospace glyphs. -* CMake: Automatically check if `lib/the_Foundation` is up-to-date. -* CMake: Build configuration fails if an SSL library is not found. -* Reverted default bookmarks having "Getting Started" as a remote bookmark source. Now it's just a regular bookmark. - -## 1.2.2 -* Stability improvements. -* Whitespace is no longer normalized when using the monospace body setting. -* Fixed issues with percent-encoded Gopher paths. -* macOS: Try to prevent forced use of high-performance GPU. - -## 1.2.1 -* Fixed crash when creating a bookmark. - -## 1.2 - -New features: -* Atom feed subscriptions: Atom XML documents are automatically converted to Gemini feed index pages. This is a built-in version of the Atom-to-Gemini example on the Help page. -* Inline downloads: right-click on any link that is openable inside Lagrange and select "Download Linked File". -* Editable bookmark icons: use your favorite Unicode character as the symbol to represent a bookmarked site. -* Searching via URL field: non-URL text entered in the field is passed onto the configured search query URL (Preferences > Network). An indicator is shown if a query will take place. -* Tab auto-reloading: configure a reloading interval using the page context menu ("Set Auto-Reload..."). Auto-reloading is part of the persistent state of the tab. -* "Iosevka" and "Source Sans Pro" (the UI font) can be used as heading and body fonts. -* User preference for aligning all pages to the top of the window. -* Keybinding (F11) for toggling fullscreen mode. On macOS, the shortcut is ⌃⌘F as before. -* Keybinding for finding text on page. - -UI design: -* Enhanced navbar: adjusted spacing, URL field has a maximum width, tab titles have less pronounced borders. -* Improved sidebar appearance: bold subheadings, larger feed icons, adjusted spacing, background color. -* Font consistency: all UI elements use the same font (i.e., no more monospace input fields). -* Added setting for UI accent color (teal, orange). -* General fine-tuning of the color palette. -* Dialog buttons are aligned to the right edge, leaving room for additional action buttons on the left. -* Page Information button is embedded in the URL field. -* Page Information dialog is attached to its button. -* Site icons use a different color in tab titles for visual distinction. -* Fade background behind modal dialogs. -* Responsive page margins. -* Windows: Added a custom window frame to replace the default Windows one. This looks nicer but does not behave exactly like a native window frame. Added a setting to Preferences for switching back to the default frame. - -Other changes: -* Help is opened on first run instead of the "About Lagrange" page to make it easier to discover important Gemini links like the FAQ. -* "Go to Root" respects a user name found in the URL. One can still "Go to Parent" to get above the user level. -* Feed entries are sorted by refresh time if they are published on the same date. -* Don't show future-dated feed entries in Feeds. -* Middle-clicking on links: open new tab in background or foreground depending on the Shift key. -* Shift+Insert can be used for pasting clipboard contents into input fields. -* Removed a strange violet-on-green color theme pairing. - -Bug fixes: -* Fixed text prompt dialogs closing and accepting the entered text when switching focus away from the app. -* Scroll position remains fixed while horizontally resizing the window or sidebars. -* Fixed a crash when opening the audio player menu. -* Fixed Gopher requests that were using URL (percent) encoded characters. -* Windows: Fixed a flash of white when the window is first opened. - -## 1.1.4 -* Fixed feed entry highlight/read status issue in the sidebar. -* Fixed Gopher menu links that contain spaces. -* Fixed vertical alignment of short pages: top banner is excluded because it is not part of the content. - -## 1.1.3 -* Fixed crash when deleting a bookmark that was being used as a remote bookmark source. -* Fixed potential crash at shutdown. -* Fixed URL path decoding not respecting reserved characters. -* AppImage: Disable SSE 4.1 for improved compatibility. -* Windows: Fixed portable build so it stores user files under the "userdata" directory and not under AppData\Roaming\. - -## 1.1.2 -* Fixed potential crash at launch. -* Fixed input query from a background tab being applied to the foreground tab. An input query now forces a tab to the foreground. -* Fixed window scroll position moving when resizing vertically. -* Fixed feed refresh waiting forever if a server doesn't respond. -* Fixed hover state not being cleared when right-clicking links. -* Fixed remote bookmarks not appearing if they lacked a user-friendly name on the source page. - -## 1.1.1 -* Fixed focus cycling inside dialogs. Widgets outside a dialog are not allowed to be focused. -* Fixed missing cursor in the New Identity "Valid until" field. -* Fixed "Import Links as Bookmarks" so it can be used to import local copies of remote bookmarks when viewing the remote source page. -* Fixed a cosmetic issue in the Import Identity dialog where part of the widget frames were not drawn. -* Fixed word wrapping issue in unread feed entry titles. -* Fixed opening a URI that contains a fragment in the default browser. The fragment is no longer omitted. -* Fixed default value for the Line Width setting. -* Linux: Check monitor DPI for UI scaling like on Windows and macOS. -* Allow reloading the same URL when clicking on a link or bookmark, or pressing Enter in the navbar. -* Bookmark URLs are normalized by removing the default Gemini port. -* Added a list of environment variables to "about:debug". -* XDG: Respect `XDG_CONFIG_HOME` environment variable for storing user files. -* XDG: Use the configured XDG download directory as default Downloads location. -* The default set of bookmarks now uses a remote source. -=> gemini://skyjake.fi/lagrange/getting_started.gmi "Getting Started" bookmarks - -## 1.1 -* Added identity importing: existing client certificates in PEM format can be imported from the current page, from clipboard, or from drag-and-dropped files. -* Added setting for maximum cache size. This is the amount of fetched data kept in memory for page navigation and content lookup. The default is 10 MB. -* Added option to show full link URL when hovering on it. -* Added support for Finger links (courtesy of John Cowan). -* Added keybindings for page reload, opening link in new tab via home row keys (${SHIFT+}F), and hovering on a link via home row keys (H). -* Added keybinding for switching to next set of links for home row navigation. -* Added keybindings for new tab, close tab, adding a bookmark. -* Added a bold UI font. It is used for unread feed entries and default dialog buttons. -* Better alignment of quick lookup result icons and labels. -* Remote bookmarks are grouped under their source in the bookmark list. -* A bookmark's icon is updated after loading the page so it matches the site. -* Trusting a new server certificate manually will update the current page without reloading. -* Middle-clicking on a tab title closes the tab. -* Internal state files now use an ".lgr" extension. If downgrading after running v1.1, note that the old version will not read these. -* Fixed timestamps of visited URLs. Your browsing history will be cleared but can still be viewed manually in "visited.txt". -* Fixed issue where "heading" feed entries would turn unread after a while. -* Fixed duplicate U key for home row navigation. -* Fixed an issue with Unicode characters in quick lookup search terms. - -## 1.0.3 -* Improved font glyph caching: only rasterize glyphs when drawing text, and retry after failure. This makes initial document layout faster and avoids issues with permanently lost glyphs. -* Fixed parts of text disappearing when the glyph cache fills up. The cache also uses less memory now. -* Fixed percent-encoding of spaces when copying URLs to clipboard. -* Fixed feed entry context menu showing the wrong menu item for Mark as Read/Unread. -* Fixed parentheses and brackets being trimmed from feed entry titles. -* Fixed quotes appearing continuous even when there are empty lines in between. -* Fixed quote border line not showing up on empty quote lines. -* Fixed handling of redirection in a background tab — redirected URL would open in the current tab. -* Fixed Gemini URL normalization with regard to default port. -* Fixed a very minor memory leak. -* Fixed missing "gopher:" URL scheme registration on macOS. - -## 1.0.2 -* Fixed URL input field showing the wrong URL when opening tabs in the background. -* Fixed trusting a renewed server certificate when multiple tabs are open. -* Fixed opening sidebar feed entries in new/background tab with modifier keys. -* Fixed editing identity notes. The entered new notes were not being applied. -* Server certificate domain name check accepts a matching CN even when SAN doesn't match. - -## 1.0.1 -* Fixed percent-encoding of the query string. -* Fixed cursor positioning in input fields. - -## 1.0 -* Added remote bookmarks. Any bookmarked 'text/gemini' page with the "remotesource" tag is a source of remote bookmarks. Each link on the page is shown as a remote bookmark in Bookmarks. -* Added a way to export bookmarks via the special page "about:bookmarks". The page can also list all bookmarks by tag or by creation date. -* Added context menu item for duplicating a bookmark. -* Import all links on a page as bookmarks. (Importing tags is not supported in this version.) -* Links can be bookmarked via context menu. -* Open links with an unrecognized scheme in the default browser. -* Open sidebar items in new/background tab via context menu or modifier keys. -* "Edit Feed..." menu item shows the Feed Settings dialog. -* Removed unimplemented menu items. - -## 0.13.2 -* Added a little spinner to indicate ongoing requests. -* Fixed very thin progress bar on HiDPI displays. -* Fixed link to Help page from the Identities sidebar tab. -* Fixed incorrect text colors in the UI (e.g., selected lookup result). -* macOS: Disable menu shortcuts for navigation when editing text to prevent accidental page changes. - -## 0.13.1 -* Fixed build failure on Linux. - -## 0.13 -* Support for Internationalized Domain Names (IDN) in network requests. -* Percent-encoded URL paths are shown decoded in the UI, and encoded in outgoing requests. -* Added option to disable decoding of percent-encoded paths for the UI. -* Quick search via URL bar shows entries from subscribed feeds. -* Added keybindings for zooming. -* Improved usability of page content searching (${CTRL+}F, Escape). -* Clicking on a certificate warning shows the Certificate Status dialog. -* macOS: Keyboard shortcuts in native menus are updated according to bindings. -* Tweaked handling of Emojis in monospace text. They are given more space as needed, but the original monospace spacing is restored after whitespace. -* Fira Mono replaced with Iosevka Term Extended. -* Fixed use of variable-width fonts in input fields. -* Fixed handling of Unicode joiners and modifiers (by ignoring them, since we lack the glyphs). -* Fixed a layout issue with sidebars where the bottommost content line was occasionally not visible. -* Fixed exit when a hook program didn't read its input. -* Fixed crash when using an identity (with LibreSSL on OpenBSD). - -## 0.12.1 -* 'text/*' content falls back to plain text. -* Minimized visual artifacts in Unicode box-drawing characters (overlapping/gaps) by fine-tuning glyph scaling. -* Fixed truncated tab titles when opening tabs in background. -* Fixed possible exit if hook program not found (SIGPIPE). -* REQUEST_URL is set in the environment when running MIME hooks. -* "about:debug" lists the configured MIME hooks. -* macOS: Fixed excessive CPU usage while idling. - -## 0.12 -* Added MIME hooks: pipe Gemini responses through external programs for arbitrary processing. (See "about:help" for usage.) -* Added a right-hand sidebar; have a sidebar on the right or on both sides at once. -* Added a clear warning banner when there is an issue with the server's TLS certificate. -* Follow Weiph/pikkulogs — subscribe to new headings on pages. -* Added UI for subscribing: feed name, entry type (Gemini feed or new headings). -* Added keyboard shortcut ${SHIFT+}${CTRL+}D for subscribing to page. -* Feeds sidebar is capped to 100 entries. "about:feeds" shows all known entries. -* Network connections have a timeout in case server doesn't respond at all. -* Adjusted spacing before/after links to reflect use of empty lines in the source. -* Clicking on page area unfocuses URL input field. -* Added keybindings for switching tabs. -* Gopher: Query links have a 🔍 icon. -* Fixed handling of "file:///" URIs on Windows. -* Fixed misaligned Unicode box-drawing characters. -* Fixed missing error page if status code is unknown (torture test 34). -* Fixed detection of invalid headers (torture test 39). -* Fixed rendering of soft hyphens (torture test 50). - -## 0.11 -* Added feed subscriptions. A subscription is any bookmark with the "subscribed" tag. Subscribed feeds are refreshed in the background while Lagrange is running. -* Added a new sidebar tab for feeds. -* Added "about:feeds" to show entries from all subscriptions on one page. -* Added icons for special bookmark tags, and context menu items for toggling "homepage" and "subscribed". -* Improved stability: fixed data races, undefined behavior, thread leaks. -* Wide preformatted blocks can be scrolled horizontally with the mouse wheel or trackpad. -* Line widths are slightly narrower for improved readability. -* Light mode UI color palette is less saturated, more sepia-toned. -* Tall menus/dialogs can be scrolled with the mouse wheel. -* Improved download progress updates: never update more often than the UI can be refreshed. -* macOS: Control-Click works as a right mouse click. -* Unix: Location of `xdg-open` is no longer hardcoded. -* Fixed large downloads (10 MB+) stopping prematurely due to a decryption error. -* Fixed window contents not being updated during window resizing. -* Fixed selection/search markers disappearing when scrolling down. -* Fixed displaying of "about:" URLs in history. -* Fixed build on FreeBSD (tested on 12.1). - -## 0.10 -* Added option to load inline images when pressing Space or ↓ for a more focused reading experience — just keep tapping a single key to proceed. If an image link is visible, it will be loaded instead of scrolling. This option is disabled by default. -* Added context menu item to save inline images to Downloads. -* Added an option to use a proxy server for Gemini requests. -* Added a new keyboard link navigation mode focusing on the home row keys. The default keybinding for this is "F". -* Added a keybinding to activate keyboard link modifier mode. The keyboard link keys are active while the modifier is held down. The default is ${ALT}. -* Clearing and resetting keybindings via a context menu. -* Added a Window tab in the Preferences dialog; moved some of the settings around for better organization. -* Improved page search visualization: if the match is inside a link URL, the link icon is now highlighted. Previously these matches were not visualized in any way. -* Improvements to URI parsing with regard to RFC 3986. Cases that are handled better are double slashes, query-only relative URIs, relative URIs that begin with a tilde, IPv6 literals, username in the authority. -* Replaced EB Garamond with Tinos for improved readability. -* Replaced Kosugi Maru with Noto Sans CJK JP for better glyph coverage. -* Fixed font sizing of level 3 headings. -* Fixed download progress indicators sometimes remaining visible even after leaving the page. - -## 0.9 -* Clicking on the top banner of a page (where the site icon and hostname are shown) navigates to the root directory of the site. -* Added menu items and keybindings for navigating to site root or the parent directory. -* Added option to use a monospace body text font on all Gemini and/or Gopher pages. -* Remember redirect source URLs as visited but not shown in the History tab. Note that "visited.txt" is no longer fully compatible if opened in an older version of Lagrange. -* "gopher:" scheme is allowed in command line arguments. -* XDG: .desktop file declares support for opening Gopher URLs. -* Fixed an issue where copying the URL input field would not place anything on the clipboard. -* Fixed the Lagrange window visibly changing position during launch. -* Fixed crash when a single percent sign was typed in an input field. -* macOS: Fixed native menu keyboard shortcuts causing redundant command activations. -* macOS: Fixed assigning keybindings when there is an equivalent native menu shortcut. - -## 0.8.1 -* Fixed potential lockup when navigating back to a query prompt. -* macOS: Improved handling of scroll wheel events from a mouse. - -## 0.8 -* Added support for Gopher. -* Added support for the full palette of 8-bit ANSI foreground colors. -* Added option to disable smooth scrolling. -* Added button to manually set server certificate as trusted (if the certificate is valid but untrusted). -* Added keybindings for Back/Forward navigation. -* Added a context menu item for opening HTTP links in the default browser even when a proxy is configured. -* Revised identity creation dialog: changed field order, added warning about temporary identities not being saved. -* ${CTRL+}Click opens tab in background, ${SHIFT+}${CTRL+}Click opens as foreground tab. The same modifier keys work with keyboard navigation. -* Improved word wrapping of emoticons (:D). -* Automatic redirects allowed when the destination URL uses the same scheme as the originating URL. For example, when using a proxy, HTTP(S) is allowed to automatically redirect to other HTTP(S) URLs. -* Windows: Fixed handling of drag-and-dropped and command line file paths. - -## 0.7.2 -* Fixed parsing of the server's response. In some cases it was possible that the response was only partially read. -* Fixed handling of TLS/SSL connection being closed without the socket being closed. - -## 0.7.1 -* Fixed build on OpenBSD. -* Fixed build with LibreSSL. -* Fixed a potential crash at app shutdown. -* Fixed a potential crash when a thread exits. -* Fixed a potential lockup when a thread exits. -* Linux/Unix: Open "mailto:" links with xdg-open instead of the web browser. - -## 0.7 -* Basic set of user-configurable key bindings. -* Sidebar: Added a "New Identity" button and a link to "about:help" if there are no identities. -* Faster drawing of certain UI elements: site icon and current heading in the left margin, unfocused input fields, timestamp at the end of the page. -* History is not updated until a network request finishes. -* Improved opening connections when multiple IP addresses are found for a hostname. -* Fixed handling of TLS/SSL errors and hostname lookup problems — an error page is shown. -* Fixed an issue where window contents were not being updated immediately after the window gets exposed when using, e.g., openbox or dwm. - -## 0.6 -* Added an indicator to visualize progress of network requests. -* Added new color themes for page content: Colorful Light, Black, Gray, Sepia, High Contrast. -* Added page content color theme selection in Preferences. -* Added quote indicator option: icon or vertical line. -* Added a new font for Korean glyphs. -* Smoother smooth scrolling, making it easier to keep one's eyes on the content throughout the motion. -* Windows: Register Lagrange as a handler of "gemini:" URLs. -* macOS: Fixed glitchy window dragging during audio playback. -* Fixed timestamps of cached pages. - -## 0.5 -* Added MP3 support in the audio player (using mpg123). -* Added volume control in the audio player. -* Metadata in Vorbis and MP3 audio content (title, artist, etc.) is shown in the audio player menu. -* Added new serif fonts: EB Garamond and Literata. -* Allow configuring separate fonts for headings and body text for better visual distinction. -* Preferences dialog remembers the previously open tab. -* Paste from clipboard on middle mouse button click. -* Open links in new tab with middle mouse button. -* Fixed failure to find resources when launching via PATH. -* Fixed color saturation setting not affecting the default color theme. -=> https://mpg123.org/ mpg123: MPEG audio player and decoder library - -## 0.4.1 -* Set keyboard focus to URL input field after opening a new tab. -* Pause other audio players when a new one is started. One can still choose to have multiple audio players playing simultaneously by unpausing them again. -* Fixed dismissing an audio player that is still downloading content. The partially downloaded data is discarded. -* Fixed saving pages whose name starts with a tilde. -* Fixed saving pages restored from cache. -* Windows: The app is now distributed as an installer created with Inno Setup. -* Windows: All binaries are signed. - -## 0.4 -* Added audio playback with support for streaming. Supported audio formats in this release are WAV (PCM, mono/stereo, 8/16/24/32 integer/float) and Ogg Vorbis. Shoutout to Sean Barrett et al. for stb_vorbis. -* Added inline audio player that works like inline images. Clicking on an audio link opens the audio player below the link (works for URLs that have file extension .wav/.ogg). -* Visual fine-tuning: increased Fira Sans line spacing; list bullets use an accent color; adjusted accent colors in the light mode palette. -* Sidebar has a maximum width — the document must remain visible. -* Windows: Support for HiDPI displays and the system UI scaling factor. The UI will be scaled according to your settings automatically without having to adjust the UI scaling in Preferences. -* macOS: Use OpenGL on 10.13 for potentially better compatibility. -* Fixed a memory leak when closing tabs. -* Fixed unnecessary continual window redrawing related to the scrollbar hover outline. -=> https://github.com/nothings/stb stb: single-file public domain libraries for C/C++ - -## 0.3 -* Added style customization. -* Added new font option: Fira Sans. -* Added a setting for maximum line width. -* Added a setting for adjusting color saturation. -* Added an option for "Outline on scrollbar": page outline appears when mouse is hovering over the scrollbar. -* Added an option for site icon and current top heading that appear when the window is wide enough. -* Added tabs in Preferences for better grouping. -* Added "Open Link in Background Tab" in link context menus. -* More flexible text selection behavior when starting on empty space. -* Smaller first paragraph font size. -* Fixed centering of popups so they remain centered when window is resized. -* Fixed sizing and alignment of Unicode symbols in preformatted text. -* Fixed sizing of Japanese glyphs in UI text (e.g., tab titles). - -## 0.2.1 -* Fixed window size/state restoration issues, e.g., after window is maximized. -* Windows: Fixed text disappearing when window is resized. - -## 0.2 -* Added an icon for quote paragraphs. -* Added Downloads folder to Preferences. -* Added "Save to Downloads" menu item (${CTRL+}S) for saving page contents. -* Added a download progress indicator in the URL input field. -* Added a progress indicator for inline image fetching. -* Added `--sw` option to force software rendering. -* Added macOS touch bar buttons for Back, Forward, Find, New Tab, and sidebar modes. -* Home button opens a random bookmark with the "homepage" tag. -* Improved context menu when right-clicking on links or the page. -* Recognize and handle "mailto:" links. -* Fixed behavior of images on single-image pages; cannot be hidden like inline images. -* Fall back to software rendering automatically if accelerated graphics are not available. -* Minor bug fixes. - -## 0.1.1 -* Fixed a potential crash at startup. -* Fixed bug where user's query input is handled by all tabs. -* Default sidebar mode is Bookmarks. -* Windows: Fixed opening HTTP links in the default web browser. - -## 0.1 -* The major version zero is reserved for non-feature-complete releases. -* Beautiful typography using Unicode fonts. -* Autogenerated page style and Unicode icon for each Gemini domain. -* Smart suggestions when typing the URL — search bookmarks, history, identities. -* Sidebar for page outline, managing bookmarks and identities, and viewing history. -* Multiple tabs. -* Identity management — create and use TLS client certificates. -* Light and dark UI themes. -* Select and copy text with the mouse. -* Find text on the page. -* Open image links inline on the same page. -* Open links via keyboard shortcuts. -* Instant back/forward navigation. -* Smooth scrolling. -* Scaling page content (50%...200%). -* Scaling factor for the UI (for arbitrary monitor DPI). -* Persistent app state — tabs and history are restored on next run. +=> about:version-1.5 Older versions diff --git a/src/gmrequest.c b/src/gmrequest.c index 3d5a4aef..82c232e1 100644 --- a/src/gmrequest.c +++ b/src/gmrequest.c @@ -358,6 +358,12 @@ static const iBlock *aboutPageSource_(iRangecc path, iRangecc query) { if (equalCase_Rangecc(path, "version")) { return &blobVersion_Resources; } + if (equalCase_Rangecc(path, "version-1.5")) { + return &blobVersion_1_5_Resources; + } + if (equalCase_Rangecc(path, "version-0.13")) { + return &blobVersion_0_13_Resources; + } if (equalCase_Rangecc(path, "debug")) { return utf8_String(debugInfo_App()); } diff --git a/src/resources.c b/src/resources.c index ae85463a..fa7485ce 100644 --- a/src/resources.c +++ b/src/resources.c @@ -33,6 +33,8 @@ iBlock blobAbout_Resources; iBlock blobHelp_Resources; iBlock blobLagrange_Resources; iBlock blobLicense_Resources; +iBlock blobVersion_0_13_Resources; +iBlock blobVersion_1_5_Resources; iBlock blobVersion_Resources; iBlock blobArghelp_Resources; iBlock blobCs_Resources; @@ -76,6 +78,8 @@ static struct { { &blobVersion_Resources, "about/android-version.gmi" }, #else { &blobHelp_Resources, "about/help.gmi" }, + { &blobVersion_0_13_Resources, "about/version-0.13.gmi" }, + { &blobVersion_1_5_Resources, "about/version-1.5.gmi" }, { &blobVersion_Resources, "about/version.gmi" }, #endif { &blobArghelp_Resources, "arg-help.txt" }, diff --git a/src/resources.h b/src/resources.h index 3852cc3e..e440fda3 100644 --- a/src/resources.h +++ b/src/resources.h @@ -35,6 +35,8 @@ extern iBlock blobAbout_Resources; extern iBlock blobHelp_Resources; extern iBlock blobLagrange_Resources; extern iBlock blobLicense_Resources; +extern iBlock blobVersion_0_13_Resources; +extern iBlock blobVersion_1_5_Resources; extern iBlock blobVersion_Resources; extern iBlock blobArghelp_Resources; extern iBlock blobCs_Resources; -- cgit v1.2.3 From 04b9194e8e5e61d4799cfb41a9b408601b1a8b9f Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sun, 30 Jan 2022 14:12:11 +0200 Subject: Updated release notes --- res/about/version.gmi | 1 + 1 file changed, 1 insertion(+) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 1bd04885..63c026ac 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -10,6 +10,7 @@ * Unix: Added a lagrange(1) manual page. * Hide the [+] button on the tab button row if the navbar has a New Tab button. * "/index.gmi" is considered equal to "/" when navigating to parent directory. +* Site icon ❑ replaced with ⌘ ("place of interest") for a more distinct appearance and to avoid similarity with the ❐ "Open in New Tab" icon. * Navigating to parent or root from "about:" pages goes to "about:about" to see overview of all the About pages. * Gopher: Fixed navigating to root, e.g., when clicking on the page top banner. Set item type to 1 to show a gophermap and not the plain source. * Titan: When navigating to parent/root, switch URL scheme to "gemini". This action occurs on a Titan response page, so initiating a new upload with the parent/root URL is probably not appropriate. -- cgit v1.2.3 From f5192df9720e046fc55b2f4f632709ba1e53f17b Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Tue, 1 Feb 2022 22:00:11 +0200 Subject: Fixed ANSI color handling issues Added the missing BG escapes 100-107, and fixed how the FG is adjusted to keep text legible. Previously it was not considering the actual BG color being applied to a text run. --- res/about/version.gmi | 4 ++++ src/ui/color.c | 27 ++++++++++----------------- src/ui/text.c | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+), 17 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 63c026ac..438ff950 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -6,6 +6,10 @@ ``` # Release notes +## 1.10.4 +* Added missing ANSI background color codes 100-107 (high-intensity VGA). +* Fixed how the ANSI FG color is adjusted to keep text legible on bright backgrounds when BG color is unset. + ## 1.10.3 * Unix: Added a lagrange(1) manual page. * Hide the [+] button on the tab button row if the navbar has a New Tab button. diff --git a/src/ui/color.c b/src/ui/color.c index 3c2f0339..824342ae 100644 --- a/src/ui/color.c +++ b/src/ui/color.c @@ -868,23 +868,16 @@ void ansiColors_Color(iRangecc escapeSequence, int fgDefault, int bgDefault, case 97: fg = ansi8BitColors_[8 + arg - 90]; break; - } - } - /* Ensure legibility if only the foreground color is set. */ - if (fg.a) { - const iHSLColor themeBg = get_HSLColor(tmBackground_ColorId); - const float bgLuminance = luma_Color(get_Color(tmBackground_ColorId)); - if (bgLuminance > 0.4f) { - float dim = (bgLuminance - 0.4f); - fg.r *= 0.5f * dim; - fg.g *= 0.5f * dim; - fg.b *= 0.5f * dim; - } - if (themeBg.sat > 0.15f && themeBg.lum >= 0.5f) { - iHSLColor fgHsl = hsl_Color(fg); - fgHsl.hue = themeBg.hue; - fgHsl.lum = themeBg.lum * 0.5f; - fg = rgb_HSLColor(fgHsl); + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + case 106: + case 107: + bg = ansi8BitColors_[8 + arg - 100]; + break; } } if (fg.a && fg_out) { diff --git a/src/ui/text.c b/src/ui/text.c index 66231348..3fe56b59 100644 --- a/src/ui/text.c +++ b/src/ui/text.c @@ -697,6 +697,25 @@ struct Impl_AttributedRun { static iColor fgColor_AttributedRun_(const iAttributedRun *d) { if (d->fgColor_.a) { + /* Ensure legibility if only the foreground color is set. */ + if (!d->bgColor_.a) { + iColor fg = d->fgColor_; + const iHSLColor themeBg = get_HSLColor(tmBackground_ColorId); + const float bgLuminance = luma_Color(get_Color(tmBackground_ColorId)); + if (bgLuminance > 0.4f) { + float dim = (bgLuminance - 0.4f); + fg.r *= 0.5f * dim; + fg.g *= 0.5f * dim; + fg.b *= 0.5f * dim; + } + if (themeBg.sat > 0.15f && themeBg.lum >= 0.5f) { + iHSLColor fgHsl = hsl_Color(fg); + fgHsl.hue = themeBg.hue; + fgHsl.lum = themeBg.lum * 0.5f; + fg = rgb_HSLColor(fgHsl); + } + return fg; + } return d->fgColor_; } if (d->attrib.fgColorId == none_ColorId) { -- cgit v1.2.3 From 99d6297a58c08926d4316b80c720ac602e236e6c Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 4 Feb 2022 06:25:52 +0200 Subject: Fixed issues with stripping ANSI escapes --- res/about/version.gmi | 4 ++- src/gmdocument.c | 72 +++++---------------------------------------------- src/gmutil.c | 38 +++++++++++++++++++++++++++ src/macos.m | 2 +- src/ui/text.c | 12 ++++++--- src/ui/text.h | 2 +- 6 files changed, 59 insertions(+), 71 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 438ff950..8de16a87 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -8,7 +8,9 @@ ## 1.10.4 * Added missing ANSI background color codes 100-107 (high-intensity VGA). -* Fixed how the ANSI FG color is adjusted to keep text legible on bright backgrounds when BG color is unset. +* Fixed how the ANSI FG color is adjusted to keep text legible on dark or bright backgrounds when BG color is unset. +* Fixed possible crash when there are ANSI escapes in the alt text of a preformatted block. +* Fixed tab/window titles containing ANSI escapes (escapes are removed). ## 1.10.3 * Unix: Added a lagrange(1) manual page. diff --git a/src/gmdocument.c b/src/gmdocument.c index 5bb1dd21..b5e71e21 100644 --- a/src/gmdocument.c +++ b/src/gmdocument.c @@ -613,6 +613,10 @@ static iBool typesetOneLine_RunTypesetter_(iWrapText *wrap, iRangecc wrapRange, } static void doLayout_GmDocument_(iGmDocument *d) { + static iRegExp *ansiPattern_; + if (!ansiPattern_) { + ansiPattern_ = makeAnsiEscapePattern_Text(iTrue /* with ESC */); + } const iPrefs *prefs = prefs_App(); const iBool isMono = isForcedMonospace_GmDocument_(d); const iBool isGopher = isGopher_GmDocument_(d); @@ -620,8 +624,7 @@ static void doLayout_GmDocument_(iGmDocument *d) { const iBool isVeryNarrow = d->size.x <= 70 * gap_Text; const iBool isExtremelyNarrow = d->size.x <= 60 * gap_Text; const iBool isFullWidthImages = (d->outsideMargin < 5 * gap_UI); -// const iBool isDarkBg = isDark_GmDocumentTheme( -// isDark_ColorTheme(colorTheme_App()) ? prefs->docThemeDark : prefs->docThemeLight); + initTheme_GmDocument_(d); d->isLayoutInvalidated = iFalse; /* TODO: Collect these parameters into a GmTheme. */ @@ -659,7 +662,6 @@ static void doLayout_GmDocument_(iGmDocument *d) { const iArray *oldPreMeta = collect_Array(copy_Array(&d->preMeta)); /* remember fold states */ clear_Array(&d->preMeta); clear_String(&d->title); -// clear_String(&d->bannerText); if (d->size.x <= 0 || isEmpty_String(&d->source)) { return; } @@ -673,7 +675,6 @@ static void doLayout_GmDocument_(iGmDocument *d) { int preFont = preformatted_FontId; uint16_t preId = 0; iBool enableIndents = iFalse; -// iBool addSiteBanner = d->bannerType != none_GmDocumentBanner; const iBool isNormalized = isNormalized_GmDocument_(d); enum iGmLineType prevType = text_GmLineType; enum iGmLineType prevNonBlankType = text_GmLineType; @@ -757,7 +758,6 @@ static void doLayout_GmDocument_(iGmDocument *d) { if (d->format == gemini_SourceFormat && startsWithSc_Rangecc(line, "```", &iCaseSensitive)) { isPreformat = iFalse; -// addSiteBanner = iFalse; /* overrides the banner */ continue; } run.mediaType = max_MediaType; /* preformatted block */ @@ -765,28 +765,6 @@ static void doLayout_GmDocument_(iGmDocument *d) { run.font = (d->format == plainText_SourceFormat ? plainText_FontId : preFont); indent = indents[type]; } -#if 0 - if (addSiteBanner) { - addSiteBanner = iFalse; - const iRangecc bannerText = urlHost_String(&d->url); - if (!isEmpty_Range(&bannerText)) { - setRange_String(&d->bannerText, bannerText); - iGmRun banner = { .flags = decoration_GmRunFlag | siteBanner_GmRunFlag }; - banner.bounds = zero_Rect(); - banner.visBounds = init_Rect(0, 0, d->size.x, lineHeight_Text(banner_FontId) * 2); - if (d->bannerType == certificateWarning_GmDocumentBanner) { - banner.visBounds.size.y += iMaxi(6000 * lineHeight_Text(uiLabel_FontId) / - d->size.x, lineHeight_Text(uiLabel_FontId) * 5); - } - banner.text = bannerText; - banner.font = banner_FontId; - banner.color = tmBannerTitle_ColorId; - pushBack_Array(&d->layout, &banner); - pos.y += height_Rect(banner.visBounds) + - 1.5f * lineHeight_Text(paragraph_FontId) * prefs->lineSpacing; - } - } -#endif /* Empty lines don't produce text runs. */ if (isEmpty_Range(&line)) { if (type == quote_GmLineType && !prefs->quoteIcon) { @@ -867,6 +845,8 @@ static void doLayout_GmDocument_(iGmDocument *d) { if ((type == heading1_GmLineType || type == heading2_GmLineType) && isEmpty_String(&d->title)) { setRange_String(&d->title, line); + /* Get rid of ANSI escapes. */ + replaceRegExp_String(&d->title, ansiPattern_, "", NULL, NULL); } /* List bullet. */ if (type == bullet_GmLineType) { @@ -1959,44 +1939,6 @@ void setUrl_GmDocument(iGmDocument *d, const iString *url) { } } -int replaceRegExp_String(iString *d, const iRegExp *regexp, const char *replacement, - void (*matchHandler)(void *, const iRegExpMatch *), - void *context) { - iRegExpMatch m; - iString result; - int numMatches = 0; - const char *pos = constBegin_String(d); - init_RegExpMatch(&m); - init_String(&result); - while (matchString_RegExp(regexp, d, &m)) { - appendRange_String(&result, (iRangecc){ pos, begin_RegExpMatch(&m) }); - /* Replace any capture group back-references. */ - for (const char *ch = replacement; *ch; ch++) { - if (*ch == '\\') { - ch++; - if (*ch == '\\') { - appendCStr_String(&result, "\\"); - } - else if (*ch >= '0' && *ch <= '9') { - appendRange_String(&result, capturedRange_RegExpMatch(&m, *ch - '0')); - } - } - else { - appendData_Block(&result.chars, ch, 1); - } - } - if (matchHandler) { - matchHandler(context, &m); - } - pos = end_RegExpMatch(&m); - numMatches++; - } - appendRange_String(&result, (iRangecc){ pos, constEnd_String(d) }); - set_String(d, &result); - deinit_String(&result); - return numMatches; -} - iDeclareType(PendingLink) struct Impl_PendingLink { iString *url; diff --git a/src/gmutil.c b/src/gmutil.c index ce1b68c7..e59e6649 100644 --- a/src/gmutil.c +++ b/src/gmutil.c @@ -904,3 +904,41 @@ const iGmError *get_GmError(enum iGmStatusCode code) { iAssert(errors_[0].code == unknownStatusCode_GmStatusCode); return &errors_[0].err; /* unknown */ } + +int replaceRegExp_String(iString *d, const iRegExp *regexp, const char *replacement, + void (*matchHandler)(void *, const iRegExpMatch *), + void *context) { + iRegExpMatch m; + iString result; + int numMatches = 0; + const char *pos = constBegin_String(d); + init_RegExpMatch(&m); + init_String(&result); + while (matchString_RegExp(regexp, d, &m)) { + appendRange_String(&result, (iRangecc){ pos, begin_RegExpMatch(&m) }); + /* Replace any capture group back-references. */ + for (const char *ch = replacement; *ch; ch++) { + if (*ch == '\\') { + ch++; + if (*ch == '\\') { + appendCStr_String(&result, "\\"); + } + else if (*ch >= '0' && *ch <= '9') { + appendRange_String(&result, capturedRange_RegExpMatch(&m, *ch - '0')); + } + } + else { + appendData_Block(&result.chars, ch, 1); + } + } + if (matchHandler) { + matchHandler(context, &m); + } + pos = end_RegExpMatch(&m); + numMatches++; + } + appendRange_String(&result, (iRangecc){ pos, constEnd_String(d) }); + set_String(d, &result); + deinit_String(&result); + return numMatches; +} diff --git a/src/macos.m b/src/macos.m index 4ad267c1..1019d13d 100644 --- a/src/macos.m +++ b/src/macos.m @@ -734,7 +734,7 @@ enum iColorId removeColorEscapes_String(iString *d) { static NSString *cleanString_(const iString *ansiEscapedText) { iString mod; initCopy_String(&mod, ansiEscapedText); - iRegExp *ansi = makeAnsiEscapePattern_Text(); + iRegExp *ansi = makeAnsiEscapePattern_Text(iTrue /* with ESC */); replaceRegExp_String(&mod, ansi, "", NULL, NULL); iRelease(ansi); NSString *clean = [NSString stringWithUTF8String:cstr_String(&mod)]; diff --git a/src/ui/text.c b/src/ui/text.c index b610d3b8..200108ed 100644 --- a/src/ui/text.c +++ b/src/ui/text.c @@ -390,8 +390,12 @@ static void deinitCache_Text_(iText *d) { SDL_DestroyTexture(d->cache); } -iRegExp *makeAnsiEscapePattern_Text(void) { - return new_RegExp("[[()][?]?([0-9;AB]*?)([ABCDEFGHJKSTfhilmn])", 0); +iRegExp *makeAnsiEscapePattern_Text(iBool includeEscChar) { + const char *pattern = "\x1b[[()][?]?([0-9;AB]*?)([ABCDEFGHJKSTfhilmn])"; + if (!includeEscChar) { + pattern++; + } + return new_RegExp(pattern, 0); } void init_Text(iText *d, SDL_Renderer *render) { @@ -399,7 +403,7 @@ void init_Text(iText *d, SDL_Renderer *render) { activeText_ = d; init_Array(&d->fonts, sizeof(iFont)); d->contentFontSize = contentScale_Text_; - d->ansiEscape = makeAnsiEscapePattern_Text(); + d->ansiEscape = makeAnsiEscapePattern_Text(iFalse /* no ESC */); d->baseFontId = -1; d->baseFgColorId = -1; d->missingGlyphs = iFalse; @@ -1988,6 +1992,7 @@ static iBool cbAdvanceOneLine_(iWrapText *d, iRangecc range, iTextAttrib attrib, } iInt2 tryAdvance_Text(int fontId, iRangecc text, int width, const char **endPos) { + *endPos = text.end; iWrapText wrap = { .mode = word_WrapTextMode, .text = text, .maxWidth = width, @@ -2002,6 +2007,7 @@ iInt2 tryAdvanceNoWrap_Text(int fontId, iRangecc text, int width, const char **e *endPos = text.start; return zero_I2(); } + *endPos = text.end; /* "NoWrap" means words aren't wrapped; the line is broken at nearest character. */ iWrapText wrap = { .mode = anyCharacter_WrapTextMode, .text = text, diff --git a/src/ui/text.h b/src/ui/text.h index c8bb6f85..b952df84 100644 --- a/src/ui/text.h +++ b/src/ui/text.h @@ -235,7 +235,7 @@ enum iTextBlockMode { quadrants_TextBlockMode, shading_TextBlockMode }; iString * renderBlockChars_Text (const iBlock *fontData, int height, enum iTextBlockMode, const iString *text); -iRegExp * makeAnsiEscapePattern_Text (void); +iRegExp * makeAnsiEscapePattern_Text (iBool includeEscChar); /*-----------------------------------------------------------------------------------------------*/ -- cgit v1.2.3 From 74d4343beb74424b400f5f65e620abf98b8c1562 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 4 Feb 2022 14:23:00 +0200 Subject: macOS: Use Metal on >60 Hz displays The problem with the occasional stutters related to SDL_WaitEvent() are still there, but on a 120 Hz display it's even worse to be stuck on 60 Hz. Metal is required for 120 Hz. --- res/about/version.gmi | 1 + src/macos.m | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 8de16a87..9fa25707 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -11,6 +11,7 @@ * Fixed how the ANSI FG color is adjusted to keep text legible on dark or bright backgrounds when BG color is unset. * Fixed possible crash when there are ANSI escapes in the alt text of a preformatted block. * Fixed tab/window titles containing ANSI escapes (escapes are removed). +* macOS: Use Metal for drawing graphics if display refresh rate is higher than 60 Hz. ## 1.10.3 * Unix: Added a lagrange(1) manual page. diff --git a/src/macos.m b/src/macos.m index 1019d13d..ad236784 100644 --- a/src/macos.m +++ b/src/macos.m @@ -72,10 +72,10 @@ static NSString *currentSystemAppearance_(void) { } iBool shouldDefaultToMetalRenderer_MacOS(void) { - /* TODO: Test if SDL 2.0.16 works better (no stutters with Metal?). */ - return iFalse; /* const iInt2 ver = macVer_(); - return ver.x > 10 || ver.y > 13;*/ + SDL_DisplayMode dispMode; + SDL_GetDesktopDisplayMode(0, &dispMode); + return dispMode.refresh_rate > 60 && (ver.x > 10 || ver.y > 13); } static void ignoreImmediateKeyDownEvents_(void) { -- cgit v1.2.3 From 5e57e39d80132948a20034cff307f75d99423e48 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 4 Feb 2022 18:08:33 +0200 Subject: Updated release notes --- res/about/version.gmi | 1 + 1 file changed, 1 insertion(+) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 9fa25707..ba62acba 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -12,6 +12,7 @@ * Fixed possible crash when there are ANSI escapes in the alt text of a preformatted block. * Fixed tab/window titles containing ANSI escapes (escapes are removed). * macOS: Use Metal for drawing graphics if display refresh rate is higher than 60 Hz. +* macOS: Handling scroll events meant for other windows. ## 1.10.3 * Unix: Added a lagrange(1) manual page. -- cgit v1.2.3 From 554129cec92364c6d3f5337dc1cd8a6c4e34c9b6 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sat, 5 Feb 2022 07:55:39 +0200 Subject: Updated release notes and AUTHORS --- AUTHORS.md | 19 ++++++++++--------- res/about/version.gmi | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) (limited to 'res/about') diff --git a/AUTHORS.md b/AUTHORS.md index 1555ab65..8672133f 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -5,17 +5,17 @@ Lagrange was created by Jaakko Keränen () in July 2020. Legend: `C` code, `T` translation ``` -C 3009 Jaakko Keränen -CT 43 Nikolay Korotkiy - T 42 Alyssa Liddell - T 41 Olga Smirnova +C 3070 Jaakko Keränen +CT 47 Nikolay Korotkiy + T 45 Alyssa Liddell + T 42 Olga Smirnova T 30 Anna “CyberTailor” - T 27 Страхиња Радић + T 29 Страхиња Радић T 26 Shibo Lyu - T 19 Wally Hackenslacker + T 20 Wally Hackenslacker T 18 MCMic - T 14 Xosé M - T 13 Tadeáš Erban + T 15 Xosé M + T 14 Tadeáš Erban T 9 Aaron Fischer T 8 El Mau T 7 Waterrail @@ -27,6 +27,7 @@ C 2 Alyssa Rosenzweig T 2 Andrij Mizyk T 2 Arns Udovič C 2 Br0000k <77938600+Br0000k@users.noreply.github.com> + T 2 Emir SARI T 2 Gabriel de Oliveira Ferreira Machado T 2 Jop Vernooy C 2 Manos Pitsidianakis @@ -36,7 +37,6 @@ C 1 Adam Mizerski C 1 Charles C 1 Dario Vladovic C 1 David Gillies - T 1 Emir SARI T 1 Eric T 1 Marek Ľach C 1 Raph M @@ -47,6 +47,7 @@ C 1 Waweic C 1 Waweic C 1 Zach DeCook C 1 jcromero +C 1 jgart <47760695+jgarte@users.noreply.github.com> C 1 zocker ``` diff --git a/res/about/version.gmi b/res/about/version.gmi index ba62acba..66f3b7dd 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -13,6 +13,7 @@ * Fixed tab/window titles containing ANSI escapes (escapes are removed). * macOS: Use Metal for drawing graphics if display refresh rate is higher than 60 Hz. * macOS: Handling scroll events meant for other windows. +* Updated UI translations. ## 1.10.3 * Unix: Added a lagrange(1) manual page. -- cgit v1.2.3 From 53ab74c3a25521faa6f41b40b1969a3b8e8ad027 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sat, 5 Feb 2022 12:54:14 +0200 Subject: SidebarWidget: Fixed animations in the 2nd split --- res/about/version.gmi | 4 ++++ src/ui/sidebarwidget.c | 57 +++++++++++++++++++++++++++----------------------- 2 files changed, 35 insertions(+), 26 deletions(-) (limited to 'res/about') diff --git a/res/about/version.gmi b/res/about/version.gmi index 66f3b7dd..15336d77 100644 --- a/res/about/version.gmi +++ b/res/about/version.gmi @@ -6,6 +6,10 @@ ``` # Release notes +## 1.10.5 +* Fixed animation issue with sidebars in the right side of split view. +* macOS: Fixed a sidebar clipping issue with Metal. + ## 1.10.4 * Added missing ANSI background color codes 100-107 (high-intensity VGA). * Fixed how the ANSI FG color is adjusted to keep text legible on dark or bright backgrounds when BG color is unset. diff --git a/src/ui/sidebarwidget.c b/src/ui/sidebarwidget.c index 16677f9e..da0ec22c 100644 --- a/src/ui/sidebarwidget.c +++ b/src/ui/sidebarwidget.c @@ -1181,39 +1181,43 @@ static iBool handleSidebarCommand_SidebarWidget_(iSidebarWidget *d, const char * argLabel_Command(cmd, "noanim") == 0 && (d->side == left_SidebarSide || deviceType_App() != phone_AppDeviceType); int visX = 0; - int visY = 0; +// int visY = 0; if (isVisible_Widget(w)) { visX = left_Rect(bounds_Widget(w)) - left_Rect(w->root->widget->rect); - visY = top_Rect(bounds_Widget(w)) - top_Rect(w->root->widget->rect); +// visY = top_Rect(bounds_Widget(w)) - top_Rect(w->root->widget->rect); } const iBool isHiding = isVisible_Widget(w); setFlags_Widget(w, hidden_WidgetFlag, isHiding); /* Safe area inset for mobile. */ - const int safePad = (d->side == left_SidebarSide ? left_Rect(safeRect_Root(w->root)) : 0); + const int safePad = + deviceType_App() == desktop_AppDeviceType + ? 0 + : (d->side == left_SidebarSide ? left_Rect(safeRect_Root(w->root)) : 0); const int animFlags = easeOut_AnimFlag | softer_AnimFlag; if (!isPortraitPhone_App()) { if (!isHiding) { - setFlags_Widget(w, keepOnTop_WidgetFlag, iFalse); - w->rect.size.x = d->widthAsGaps * gap_UI; - invalidate_ListWidget(d->list); - if (isAnimated) { - setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue); - setVisualOffset_Widget( - w, (d->side == left_SidebarSide ? -1 : 1) * (w->rect.size.x + safePad), 0, 0); + setFlags_Widget(w, keepOnTop_WidgetFlag, iFalse); + w->rect.size.x = d->widthAsGaps * gap_UI; + invalidate_ListWidget(d->list); + if (isAnimated) { + setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue); + setVisualOffset_Widget(w, + (d->side == left_SidebarSide ? -1 : 1) * + (w->rect.size.x + safePad), + 0, + 0); setVisualOffset_Widget(w, 0, 300, animFlags); + } } - } - else if (isAnimated) { - setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue); - if (d->side == right_SidebarSide) { - setVisualOffset_Widget(w, visX, 0, 0); - setVisualOffset_Widget( - w, visX + w->rect.size.x + safePad, 300, animFlags); - } - else { - setFlags_Widget(w, keepOnTop_WidgetFlag, iTrue); - setVisualOffset_Widget( - w, -w->rect.size.x - safePad, 300, animFlags); + else if (isAnimated) { + setFlags_Widget(w, horizontalOffset_WidgetFlag, iTrue); + if (d->side == right_SidebarSide) { + setVisualOffset_Widget(w, visX, 0, 0); + setVisualOffset_Widget(w, visX + w->rect.size.x + safePad, 300, animFlags); + } + else { + setFlags_Widget(w, keepOnTop_WidgetFlag, iTrue); + setVisualOffset_Widget(w, -w->rect.size.x - safePad, 300, animFlags); } } setScrollMode_ListWidget(d->list, normal_ScrollMode); @@ -1226,15 +1230,16 @@ static iBool handleSidebarCommand_SidebarWidget_(iSidebarWidget *d, const char * w->rect.pos.y = height_Rect(safeRect_Root(w->root)) - d->midHeight; setVisualOffset_Widget(w, bottom_Rect(rect_Root(w->root)) - w->rect.pos.y, 0, 0); setVisualOffset_Widget(w, 0, 300, animFlags); - //animateSlidingSheetHeight_SidebarWidget_(d); + // animateSlidingSheetHeight_SidebarWidget_(d); setScrollMode_ListWidget(d->list, disabledAtTopBothDirections_ScrollMode); } else { - setVisualOffset_Widget(w, bottom_Rect(rect_Root(w->root)) - w->rect.pos.y, 300, animFlags); + setVisualOffset_Widget( + w, bottom_Rect(rect_Root(w->root)) - w->rect.pos.y, 300, animFlags); if (d->isEditing) { setMobileEditMode_SidebarWidget_(d, iFalse); + } } - } showToolbar_Root(w->root, isHiding); } updateToolbarColors_Root(w->root); @@ -1242,7 +1247,7 @@ static iBool handleSidebarCommand_SidebarWidget_(iSidebarWidget *d, const char * /* BUG: Rearranging because the arrange above didn't fully resolve the height. */ arrange_Widget(w); if (!isPortraitPhone_App()) { - updateSize_DocumentWidget(document_App()); + updateSize_DocumentWidget(document_App()); } if (isVisible_Widget(w)) { updateItems_SidebarWidget_(d); -- cgit v1.2.3