Repository navigation
Make tags that scroll out of view reachable in the tag field - #514
Open
tonygermano wants to merge 4 commits into
Open
tonygermano wants to merge 4 commits into
tonygermano wants to merge 4 commits into
Conversation
The editor can now sit between chips, and commits insert at its position. Typing enters an outlined edit mode, in which the keys act on the text instead of the chips: - Left / Right - Navigating: move the editor past a chip - Edit mode: move the caret - Home / End - Navigating: move the editor to the first or last slot - Edit mode: move the caret - Backspace / Delete - Navigating: remove the chip before or after the editor - Edit mode: edit the text - Enter / comma - Navigating: nothing - Edit mode: commit the text - Escape - Navigating: passed on to the window - Edit mode: clear the text and leave edit mode without committing Edit mode lasts until the text is committed, Escape is pressed, or the field loses focus with no text. Deleting the text doesn't end it, so holding Backspace to clear the text can't run on into the chips. A click on the row outside the chips moves the editor back to the end. Deleting a chip from the keyboard scrolls the editor into view, but deleting one with the mouse leaves the row where it is, so the next chip slides under the pointer. The editor is sized to its text and grows while typing; it fills the rest of the row only while showing its prompt. TagChip's font and corner arc are shared so the editor and its outline match the chips. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano <tony@germano.name>
The Swing rewrite of the tag field removed the last bundled copy of bootstrap-tokenfield, so its license notice no longer applies. The jQuery and Bootstrap notices stay, since server/public_api_html still ships both. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano <tony@germano.name>
The chip row has no scrollbar, so the scroll pane's own wheel handling did nothing, and tags scrolled off the left edge could not be reached with the mouse. The wheel, or a sideways trackpad swipe, now scrolls the row horizontally. While the chips fit, the event is passed on so an enclosing scroll pane still scrolls; before, the field swallowed it. On X11, horizontal scrolling arrives as presses of mouse buttons 4 and 5 rather than as wheel events, so a toolkit event listener scrolls the row for those while the field is displayable. Buttons other than the left one no longer focus the editor or move it to the end; otherwise each sideways scroll step would pull the row back to the editor. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano <tony@germano.name>
Like a browser tab, a middle click anywhere on a chip deletes it. The "×" deletes on a left or middle click and ignores other buttons, which on X11 include horizontal scrolling. Both act on release, and only if the pointer is still over what was pressed; a click event is dropped if the pointer moves while the button is down, which a trackpoint nearly always does. A left click in a gap between chips, or past the last one, puts the editor in that gap, so tags can be inserted with the mouse. Clicks on a chip itself don't move the editor, and neither does any click while text is being edited or the field is disabled. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Tony Germano <tony@germano.name>
tonygermano
requested review from
NicoPiel,
gibson9583,
jonbartels,
kayyagari,
kpalang,
pacmano1 and
ssrowe
October 26, 2026 03:10
Contributor
|
Bugs:
Lower priority:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to #437. When a tag field has more tags than fit, the first ones scroll past the left edge, and there was no way to get back to them (see @NicoPiel's review). In the channel editor, which has no clear button, the only way to remove the first tag was to backspace through every tag after it.
This PR makes every tag reachable from both the mouse and the keyboard, and removes a license notice #437 left behind. It applies to all three tag fields: the channel editor and the Dashboard and Channels filters.
Changes
Keyboard navigation with an edit mode. The text editor can now sit between chips, and new tags are inserted where it is. Typing enters an edit mode, shown by an outline around the text, and the keys behave differently in each mode:
Edit mode lasts until the text is committed, Escape is pressed, or the field loses focus with no text. Deleting the text doesn't end it, so holding Backspace to clear what you typed can't run on into the chips.
Mouse wheel scrolling. The wheel and sideways trackpad swipes scroll the chips. When all the chips fit, the wheel event is passed on, so an enclosing scroll pane still scrolls. Before, the field swallowed it.
Mouse deletion and placement.
Third-party notice. #437 removed the last bundled copy of bootstrap-tokenfield, so its section of
THIRD-PARTY-README.txtis removed. The jQuery and Bootstrap sections stay, sinceserver/public_api_htmlstill ships both.Commits
Each commit builds on its own.
TagChip's font and corner radius, so typed text looks like the chips.Testing
./gradlew clean buildpasses.Drafted with Claude Code