Improve connection status visibility and user reconnection controls
This merge request improves how Gajim communicates connection state to the user and provides more intuitive controls for managing server connections. The changes are motivated by the experience of using Gajim with low-powered servers over low-bandwidth connections, where connections can go stale without obvious indication, and reconnection is not straightforward for new users.
I've put considerable time and effort into these changes, testing each one iteratively to ensure they feel natural within Gajim's existing design language. I appreciate that some seasoned users may find the interface changes unfamiliar at first — I'd ask that you give them a chance. The goal throughout has been to inform users about system state as clearly as possible, reduce complexity, increase flow, and make essential functions easier to discover.
Changes:
Reconnect controls:
- Added a "Refresh server connection" button (refresh icon) to the chat banner toolbar, allowing users to force a reconnection when they suspect a stale connection
- Added a "Refresh connection" option at the bottom of the status selector popover (right-click account avatar)
- Made "Go online" a clickable link in the offline status message, so users can reconnect directly from the chat area
Connection status indicators:
- Group chat avatars now display a presence dot reflecting the client's connection state — green when connected, grey when disconnected, blue when connecting
- Individual contacts show blue dots (instead of grey) while the client is connecting, since their actual status is unknown
- Replaced the lightning bolt icon in the chat list with presence dots integrated into group chat avatars, consistent with individual contacts
- Dynamic tooltips on the account avatar, chat list rows, and chat banner avatar now reflect connection state
Detailed connection progress:
- The message area status bar now shows granular connection stage information (resolving server, establishing secure connection, authenticating, binding session, discovering services, etc.)
- Status updates poll at 250ms during connection for smooth feedback
- The reconnect button shows accent styling when disconnected
- Account sidebar tooltip updates dynamically during connection
UI cleanup:
- Removed the semi-transparent overlay popups during group chat connection — state is now communicated through presence dots and the status bar
- The "not joined" overlay is delayed to prevent a brief flash during auto-join after reconnecting
- MUC status messages are now dismissible with an X button, and only appear on initial join
Design rationale:
- Stale connections are invisible — Gajim may not detect a dropped connection, and users have no obvious way to force a refresh
- Connection state is unclear — colour-coded dots and detailed progress text make the state unambiguous
- Reconnecting is hard to discover — previously required toggling the account switch in Preferences. Now accessible from the chat banner, status selector, and inline link
- Group chats lack status indication — individual contacts have always had presence dots; group chats now do too