Recycler custom emoji picker
Describe the request
TLDR: Instances have a billion custom emojis, the custom emoji picker was modeled after the unicode emoji picker, which is flowbox based. That's obviously awful for this amount of items (my instance has 6k, its basically unusable).
Art
We obviously need a recycler view. GridView is the one you'd think of for this type of view but it has a big flaw. It's missing sections (draft MR https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6002) which means the emojis won't be categorized 👎
The other option is a ListView with labels (for category titles) and boxes of 5 emojis for each row. That's not ideal however, since recycling starts at 200 items, it would load up to 1000 emojis before starting recycling.
So back to GridView.
The other issue is that due to the amount of paintable requests done, the main loop actually gets blocked while scrolling which is annoying. A threadpool or similar might be needed but in a worker fashion because we want to keep the same libsoup session for caching.
Moving forward
I think I'll finish the initial GridView + Pool implementation and then see if I can help on GTK's side for sections. Not planning on shipping this without section but it's pretty unusable as it is for huge amounts :/ Maybe we should use the old picker for 100-200 emojis and a gridview without sections for more so it's at least usable.
Checks
- [x] This follows the GNOME HIG.