Amendments on September 6, 2022
Amendments on February 10, 2022
When a window is hiding in the background, we can sleep up to a whole
An Unreal18.104.22.168 server returned a trailing space at the end of
nick lists when joining a channel, causing an infinite loop in
Some servers like InspIRCd-3 send a JOIN like "JOIN :#channel" instead
of "JOIN #channel" (which seems to go against RFC2812, but whatever).
Use a linked list to sort the array of nicks to avoid having to
shuffle around struct members on every re-sort. This also lets us
process JOINs and PARTs/QUITs on an individual nick level to just
do one corresponding list add or remove and avoid re-sorting or
reloading the entire list.
This makes it possible to join channels with many hundreds of people
in them and keep running smoothly. The initial load still takes a
while, but it works.
Amendments on February 8, 2022
This may be the cause of sending a bogus focusable object after
Instead of trying to map protocol message parts to specific things
like dest/channel/msg, just map them all to arg-arg and let
each command-specific printer use the args it cares about.
We can overflow in a few different ways, so check for all of them.
If we're about to overflow, shift out a handful of old lines before
adding new ones, but do it with a blank clipping rect so we don't get
a flashing update.