* Add Keys.Rooms.Direct configuration
Keybinding to jump to specific room id in specific account id, or the
first occurence of specific room id in any account.
* Default binding was a bad idea
This example binding was preventing the user from binding Ctrl+G,Ctrl+M
to something else.
* Use const instead of var
* Use showItemAtIndex for direct room switching
This is a simpler implementation that better fits in the existing
codebase and doesn't really have drawbacks.
* Use existing findIndex
From roomList.model. Instead of reinventing it
* Made example not a real room
Earlier I made it point to the Mirage room
* Add instructions for copying room ID
After noticing that these IDs do not match Matrix room addresses, I felt
it was necessary to explain this here, even if it's already explained in
other parts of the configuration file.
* Use .split(" ") for splitting descriptions
This is a more readable implementation.
* Fix shortcuts breaking on config reload
Wrapping HShortcut in Loader makes it destructible.
See d53978f62bab35cdc7e115c50f0571f736814582
* Cleanup showRoomByDescription method, now showById
- "Room description" is a vague, it sounds like this is about
the room topic too. Instead of having a function that takes a
string with a certain format, take explicit arguments for the user and
room ID, this way we don't need comments to explain what's going on
either
- Reduce indentations and {} noise to make it simpler to read
* More details for direct room binds config comment
Co-authored-by: miruka <miruka@disroot.org>
When reloading the config file, the HShortcut within Instanciators (e.g.
Rooms.AtIndex) were deleted then recreated.
Except Shortcut happens to be an indestructible object type.
Thus the old HShortcuts left alive were conflicting with the ones
recreated, causing them to be called ambiguously.
Loaders are destructible, so we wrap the shortcuts inside one to fix the
issue.
Go to the corresponding account settings instead of trying to focus the
first room of the target account if there is one.
This makes the behavior consistent across expanded and collapsed
accounts, and with the Keys.Account.(previous/next) keybinds that
were changed to work in this way in commit
4f4bc90faa6c4868552004b5f5cfd5f17f59cfd9.
Instantiator is better suited to the task: Repeater is specially
made to load visual components, and that forced us to wrap the
HShortcuts inside empty Items.
When clicking on an account in the top account bar or using the
Keys.Account.(previous/next) keybinds, go to the corresponding
account settings instead of trying to focus the first room of that
account if there is one: user might not want to clear the read marker of
any random room that is out of view and happens to be the first in the
list.
The goTo{Previous,Next}{Unread,Mentioned}Room keybinds only took into
accounts rooms that had a server-sent unread/highlight count, and not
those that only had a client-side unread "!" badge (e.g. for rooms that
get new messages but that have push rules disabling notifications).
Previously, clicking to select a room would make the list jump around
to become centered again. This behavior is now reserved to keyboard
navigation.
A "centerRoomListOnClick" setting has been added to allow going back
to the previous behavior.
Use a single [userId, roomId] property for the chat page.
This gets read of the intermediate state where the userId property has
been updated but the roomId one not yet, which led to the page unloading
and reloading itself until both were properly set.
Side-effect: when starting Mirage after this commit for the first time,
the last saved page will not load and user must click a room or
other page manually.
The chat page is complex and slow to create, which creates a visible lag
when user switches room.
Instead of throwing the pre-switch one away and
making a new one from scratch, keep the same page and update its user &
room ID for a big improvement in responsiveness. The rest is automatic
thanks to QML property bindings.
Adopt the correct behavior to get rid of
"QML Connections: Implicitly defined onFoo properties in Connections
are deprecated. Use this syntax instead:
function onFoo(<arguments>) { ... }"