Wheel-up now clears stickToBottom immediately on the raw scroll event, wheel-down re-checks the resting position, and the auto-scroll effect re-checks stickToBottom right before scrollToItem(0). The scroll-state effect could miss a wheel scroll that began and ended within one frame, so the next incoming line pulled the buffer back to the bottom.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JW57ZvxRmxcDF7AFACLSoV
Add extra vertical space to every buffer line (LINE_SPACING_EXTRA, 30% of font size) on top of the font natural line height. The same style measures and draws rows so whole-line snapping stays in step.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JW57ZwRSygeowNBguQEUUB
- Minimizing a window hides only that window to the tray. The other windows stay
on the desktop. Win+D still hides everything.
- Tray left click shows every hidden window at its old position, or hides them
all if none are hidden.
- The tray menu has a new Show wIRC main item that brings back just wIRC main.
- If wIRC main was hidden when wIRC quit, it starts hidden next time and the
servers that were connected reconnect by themselves, so their channel windows
open without wIRC main.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A tray icon (the app icon) is there for as long as wIRC runs. Left click hides
or shows every wIRC window; right click has Show wIRC, Hide wIRC and Exit. Exit
disconnects every server and quits.
- No wIRC window has a taskbar button. Each window is given a hidden owner window
through JNA, because Window.Type.UTILITY can't be set after Compose builds the
window and would take wIRC main's minimize button away.
- Minimizing any window hides all of them to the tray. Showing them again puts
each one back where it was. Hidden windows stay connected and keep filling their
buffers. Closing a window with X works the same as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- After a move, windows snap to the Windows desktop icon grid; after a resize,
the window height is trimmed so the scrollback ends on a whole line.
- The font size slider is replaced by square 10 to 18 buttons. Sizes saved by
the old slider round to the nearest picker size.
- Settings and font dialogs always use white text, so a dark window text color
no longer makes their labels invisible.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only chat, action and notice lines get the mention tint now. Join, part,
quit, nick and mode lines about you always contain your nick, so every one
of your own joins used to be highlighted as a mention.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each channel window's settings panel gets a Font list, and wIRC main gets a Font
button that opens the same list for the server messages box. Every name is drawn
in its own font as a preview. The choice is saved per window in window_prefs.json
(fontId) and applies to the scrollback, user list, input box and title.
- Segoe UI, Tahoma and Tw Cen MT are Microsoft-licensed, so they aren't bundled:
they load from the Windows font folders at runtime and are only listed when
present (Tw Cen MT comes with Office).
- Nunito, Quicksand and Varela Round are SIL OFL fonts, bundled in
resources/fonts with their license files.
- A missing or unloadable font falls back to Monospace.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
/quit now disconnects the window's server without closing anything: every
buffer of that server and wIRC main get a "Disconnected" line, the server card
shows Disconnected with its Connect button, history is flushed to disk, and
there's no auto-reconnect. Connect rejoins the channels we were in (including
ones joined with /join, now tracked) into the still-open windows. Sending while
disconnected shows a "Not connected" line in that window. Exit wIRC still
disconnects everything and closes the app.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Scrollback (channel windows and wIRC main): mouse drag selection, double-click word,
triple-click line, shift-click extend, Ctrl+C / Ctrl+Insert, Ctrl+A, Esc, and a
right-click menu (Copy / Copy line / Select all). Copies one line per message.
Clipboard writes go off the UI thread with a timeout, like the paste handler.
Auto-scroll pauses while selecting and catches up once the selection is cleared.
- /whois: header, every reply line, related numerics (401/402/716/263...) and server or
services notices arriving right after it all go to wIRC main under a bold
"===== WHOIS <nick> (<server>) =====" header, counted by its unread indicator.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
wIRC main scrollback
- The main window now has a "Server messages" scrollback using the same
rendering and stick-to-bottom code as channel windows (extracted from
ChannelScreen into a shared MessageScrollback composable).
- MOTD, numerics, errors, connection status, user modes, INVITE, ERROR,
non-ACTION CTCP requests and notices/messages from services
(NickServ, ChanServ, *Serv, Global, ...) and the server go there. Its
history persists like any other buffer (history/wirc-main__main.json).
- Unread indicator: lines arriving while the main window is unfocused
show as "N new" next to the label and in the window title/taskbar.
Private messages and /whois
- A PM or notice from a real user opens its query window, and reopens it
if it was closed. Services and the server no longer open windows.
- /whois <nick> sends WHOIS and shows the formatted reply in the window
it was typed in, or in wIRC main if that window has since closed.
- /me now sends a proper CTCP ACTION (the \x01 wrapper was missing).
Window position and size
- Main, channel and PM windows remember position and size in
window_prefs.json under the existing "<serverId>__<name>" key (main
uses "wirc-main__main"). The new windowX/windowY/windowWidth/
windowHeight fields are optional, so older files still load.
- A saved position is only used if the window's title strip is on a
connected monitor; otherwise, and for windows with no saved position,
windows cascade from the primary screen's top-left with a 32dp offset.
- window_prefs.json is now written via a temp file + atomic move.
Cleanup
- Remove the TEMP DEBUG aliasDebug tracing, ServerRepository.upsert
printlns and connmgr-debug printlns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Nicklist, settings, minimize and close buttons in the channel window
title bar now rest at alpha 0 and fade to full opacity on hover
(graphicsLayer alpha, so they stay laid out and clickable). Resting
alpha, hover alpha and fade duration are constants at the top of
ChannelScreen.kt. Channel name and window dragging are unchanged.
- Remove the unused temporary ircUiDebug helper now that the scrollback
fix is confirmed.
- Bump version to 0.1.6.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>