Lagrange v1.16.4 Release Notes
I don't usually post individual release notes here on the gemlog but this one should have some director's commentary.
Version 1.16.4 is a desktop-focused patch that addresses several issues with window and UI behavior. When you have a custom GUI toolkit that aims to target a wide range of desktop and mobile operating systems, it is sometimes a little difficult to keep everything straight especially when the underlying library (SDL) is not uniformly up-to-date everywhere.
This was one of those releases where you keep finding little problems every time you make a candidate build. Did I catch them all? Perhaps!
- The latest version of SDL was not being used on Windows and in the x86_64 Linux AppImage. This was causing issues particularly related to window behavior and redrawing. I'm now using a manually built SDL 2.26.5 in the AppImage instead of the ancient 2.0.12 in Ubuntu 18.04.
- The macOS 10.13 build was crashing at launch because there was a dynamic library built for macOS 11.0 in the bundle.
- The TUI build broke because I changed the text renderer APIs slightly and forgot that the terminal uses a different rendering backend.
Wonky windows and stuck buttons
- (Windows, macOS) Lagrange manually redraws the window contents while resizing the window so you can better see how the UI gets scaled. This is not SDL's default behavior — normally the window contents get rescaled as a "fake" 2D image, and only after the resizing ends, the UI layout gets redone. Consequently, you get strange stretching artifacts. Turns out, Lagrange was not only doing the redrawing but also processing events from the SDL event queue, which had the potential to confuse SDL's internal state, including knowing which buttons are held down. Now in v1.16.4, redraw-during-resize means that only drawing is done and no events are being handled. This may actually turn out to have better resizing performance than before, but I didn't have time to do a comparison.
- If you right-click while dragging tabs (holding left mouse button), weird things would happen, ranging from a crash to a neverending drag operation. This was exarcebated by the macOS build using native context menus, which means that the mouse button release events are not received by SDL at all. I have to manually reset the button state and/or fake the release with SDL events.
- (Windows, X11) Drop-down buttons that display a popup menu for selecting an item use a macOS-like positioning where the menu is shifted so that the current item is under the mouse when the menu opens. This meant that some menus near the top of the window (e.g., color theme, bookmark folder) needed to scroll to reveal all the items. This was annoying and unintended, so now these menus are allowed to become independent popups even if they would otherwise fit inside their parent window.
- Something felt off about closing tabs, and comparing against web browsers showed that there indeed was a problem. When closing a tab, which tab gets activated next should be dependent on where the tab was opened from. So for example, if you open a bunch of tabs on one page, and then proceed to close those tabs individually, they are considered siblings and get closed before the active tab switches back to the original page. This behavior is the same no matter the order in which the sibling tabs are closed.
- The selected text range in the navbar URL field was behaving strangely. When opening a tab or switching tabs, the full contents of the field are supposed to be selected. The selection was either disappearing completely or worse, becoming partially selected.
- (macOS) Swipes on the trackpad are used for backward and forward navigation. The internal implementation is not optimal, and as a workaround I'm temporarily disabling window refresh to hide a blinking artifact during the animation. In some cases, this disabling was never undone, causing the window to become permanently frozen. The issue was mostly related to a back swipe causing a dialog to open instead of a regular page.
- (Windows) The input prompt dialog had excessive empty space that disappeared when the height of the text field was updated.
- If you disabled cursor blinking in Preferences, cutting text in a text field would not cause the view to be updated immediately.
- A tiny alignment issue: a short title like "BBS" in the page margin would not be centered under the capsule icon, looking askew. (Literally unusable.)